Estruturas de Repetição
|
|
|
- Maria das Graças Anjos Sabala
- 10 Há anos
- Visualizações:
Transcrição
1 Estruturas de Repetição Introdução No capítulo anterior verificamos que a execução seqüencial dos comandos da função main nos limita a programação de algoritmos muito simples. Passamos, então, a dedicar nossa atenção ao estudo de recursos de programação mais elaborados, tais como as estruturas condicionais ifelse e switch, as quais permitem executar partes do código somente sob determinadas condições. Agora, estudaremos as estruturas de repetição, que permitem executar mais de uma vez um mesmo trecho de código. Trata-se de uma forma de executar blocos de comandos somente sob determinadas condições, mas com a opção de repetir o mesmo bloco quantas vezes for necessário. As estruturas de repetição são úteis, por exemplo, para repetir uma série de operações semelhantes que são executadas para todos os elementos de uma lista ou de uma tabela de dados, ou simplesmente para repetir um mesmo processamento até que uma certa condição seja satisfeita. Estrutura de repetição while O while é a estrutura de repetição mais simples. Ele repete a execução de um bloco de sentenças enquanto uma condição permanecer verdadeira. Na primeira vez que a condição se tornar falsa, o while não repetirá a execução do bloco, e a execução continuará com a sentença ou comando que vem logo após o bloco do while, na seqüência do programa. 0 início expressão 1 sentença(s) Sintaxe: while (expressão) { sentença; sentença; Figura 2 Sintaxe da estrutura de repetição while fim Figura 1 Fluxo de controle da estrutura de repetição while A Figura 12 ilustra a sintaxe da estrutura condicional while em C. O fluxo de execução desta estrutura está ilustrado na Figura 21. A expressão é uma condição que controla o while. Primeiro, o programa avalia a expressão. Ela utiliza os mesmos operadores relacionais e lógicos estudados quando tratamos das as estruturas condicionais. Caso o resultado da expressão seja não nulo (verdadeiro), então todo o bloco de sentenças será executado. Em seguida, o programa volta a avaliar a expressão e o processo se repete até que a expressão retorne um valor zero (falso). A expressão é sempre avaliada antes da decisão de se executar o bloco de sentenças novamente. Observação: A expressão deverá ser colocada, obrigatoriamente, entre parênteses. Copyright@2005,2006,2007,2008: Arnaldo V. Moura, Daniel F. Ferber 1
2 A repetição do while é controlada por uma condição que verifica alguma característica do programa (por exemplo, valores de variáveis). Para o uso correto do while, o bloco de sentenças precisa modificar o estado do sistema de forma a afetar justamente as características testadas na expressão. Se isto não ocorrer, então o while executará eternamente. Observação: O programa sempre executa o bloco de sentenças completo. Mesmo que durante uma execução do bloco a condição se torne falsa, o programa só verificará este fato quando avaliar novamente a expressão, preparando para uma nova repetição. Exemplo Para imprimir os números de 1 até 10: int numero = 1; while (numero <= 10) { printf("%d\n", numero); numero = numero + 1; Consulte: EstruturasRepeticao\while01\while01.vcproj Declaramos uma variável numero que controlará o while. Ela armazena o valor a ser impresso. A expressão do while verifica se o número está dentro do limite desejado (menor ou igual a 10). No início, a variável numero contém o valor 1 e, portanto, a expressão do while é satisfeita. O bloco de expressões é executado, imprimindo o valor de numero e aumentando seu valor em uma unidade. Note que isto afeta a condição que controla o bloco. Nas próximas repetições, a expressão será verdadeira para os valores de numero 2, 3, 4, 9 e 10. Quando numero armazenar o valor 11, a expressão que controla o while se tornará falsa. Nesse ponto, o while termina, encerrando as repetições. No final da execução, o valor da variável numero estará em 11, que foi justamente o valor que tornou a expressão falsa, impedindo uma nova execução do bloco while. Estrutura de repetição while em uma linha Sintaxe: while (expressão) sentença; Figura 3 Sintaxe abreviada da estrutura condicional while Quando o bloco da estrutura while contém apenas uma única sentença, pode-se omitir as chaves que delimitam o bloco, como na Figura 3. No entanto, essa forma não delimita claramente o código do while do restante do programa. Por ser mais confusa, evite a forma abreviada! Exemplo O próximo exemplo é um uso típico do while para realizar uma operação para um intervalo de números. Este programa imprime todos os divisores de um número inteiro positivo. Para o número n dado, o programa verifica se cada número de 1 até n é ou não um divisor de n. Copyright@2005,2006,2007,2008: Arnaldo V. Moura, Daniel F. Ferber 2
3 Código Fonte #include <stdio.h> #include <stdlib.h> int main(int argc, char *argv[]) { int numero; int divisor; int resto; printf("digite o numero: "); scanf("%d", &numero); divisor = 1; while (divisor <= numero) { resto = numero % divisor; if (resto == 0) { printf("divisor encontrado: %d \n", divisor); divisor = divisor + 1; return 0; Descrição passo a passo int numero; int divisor; int resto; Consulte: EstruturasRepeticao\Divisores01\Divisores01.vcproj Três variáveis inteiras são declaradas. A variável numero armazenará o valor digitado pelo usuário, para o qual descobriremos os divisores. A variável divisor é um contador que conterá o próximo número que será testado como divisor. E resto é uma variável que armazenará temporariamente o resto da divisão de numero por divisor. printf("digite o numero: "); scanf("%d", &numero); As duas linhas pedem ao usuário para digitar o número para o qual deseja descobrir os divisores. divisor = 1; while (divisor <= numero) { divisor = divisor + 1; Este bloco corresponde à estrutura de repetição. Por motivos de simplicidade, o código executado dentro do bloco foi omitido com objetivo de entender sua lógica de funcionamento. A repetição é controlada pelo valor da variável divisor. Isto quer dizer que o bloco precisa modificar o valor da variável divisor para, em algum momento, encerrar as repetições. Copyright@2005,2006,2007,2008: Arnaldo V. Moura, Daniel F. Ferber 3
4 No início, antes de executar a repetição, a variável divisor é iniciada com um valor válido (1), que é o primeiro divisor possível. A cada execução da repetição, a variável divisor é modificada, somando-se a ela uma unidade. Após certo número de repetições, valor da variável divisor ultrapassará o valor de numero e assim a repetição será encerrada. resto = numero % divisor; if (resto == 0) { printf("divisor encontrado: %d \n", divisor); O código executado dentro da repetição calcula o resto da divisão. Caso ele seja zero, significa que encontramos um divisor. Tal divisor é impresso. Primeiro exemplo de execução: Digite o numero: 100 Divisor encontrado: 1 Divisor encontrado: 2 Divisor encontrado: 4 Divisor encontrado: 5 Divisor encontrado: 10 Divisor encontrado: 20 Divisor encontrado: 25 Divisor encontrado: 50 Divisor encontrado: 100 Segundo exemplo de execução: Digite o numero: 19 Divisor encontrado: 1 Divisor encontrado: 19 O que ocorre se o número informado for zero? E se for negativo? Exemplo: O próximo exemplo é um uso típico do while para realizar uma operação até que uma condição seja satisfeita. Esta condição não depende de uma variável contadora, tal como no exemplo anterior. Assim, não é possível prever facilmente o número de repetições. O programa calcula o máximo divisor comum (MDC) entre dois números positivos. Código Fonte #include <stdio.h> #include <stdlib.h> int main(int argc, char *argv[]) { int numeroa; int numerob; int resto; printf("digite dois numeros (ordem crescente): "); scanf("%d %d", &numeroa, &numerob); while (numeroa > 0) { resto = numerob % numeroa; Copyright@2005,2006,2007,2008: Arnaldo V. Moura, Daniel F. Ferber 4
5 printf("numerob = %d; numeroa = %d; ", numerob, numeroa); printf("resto = %d\n", resto); numerob = numeroa; numeroa = resto; printf("mdc: %d", numerob); return 0; Consulte: EstruturasRepeticao\mdc01\mdc01.vcproj Descrição passo a passo O programa segue o mesmo algoritmo apresentado na introdução do curso, realizando divisões sucessivas até obter o valor do MDC. int numeroa; int numerob; int resto; São declaradas três variáveis. As primeiras duas armazenam o valor digitado pelo usuário e, no decorrer do algoritmo, esses valores convergem para o MDC. A variável resto é usada apenas para armazenamento temporário durante a repetição. while (numeroa > 0) { resto = numerob % numeroa; numerob = numeroa; numeroa = resto; A cada repetição, o algoritmo divide sucessivamente um valor pelo outro e guarda o resto. No final do bloco de repetição, a variável numeroa armazena o resto da divisão, e a variável numerob armazena o último valor da variável numeroa. A repetição é finalizada quando o resto for nulo, ou seja, quando a variável numeroa armazenar zero. Exemplo de execução Digite dois numeros (ordem crescente): numerob = 36; numeroa = 30; resto = 6 numerob = 30; numeroa = 6; resto = 0 MDC: 6 Estrutura de repetição dowhile Esta estrutura tem um comportamento muito semelhante ao while, com uma diferença crucial: a condição é verificada após executar o bloco de instruções correspondente. Copyright@2005,2006,2007,2008: Arnaldo V. Moura, Daniel F. Ferber 5
6 1 sentença(s) expressão 0 início fim Figura 4 Fluxo de controle da estrutura de repetição dowhile Sintaxe: do { sentença; sentença; while (expressão); Figura 5 Sintaxe da estrutura de repetição dowhile A Figura 45 ilustra a sintaxe da estrutura condicional dowhile em C. O fluxo de execução desta estrutura está ilustrado na Figura 54. A expressão é uma condição que controla o dowhile. Executa-se o bloco de sentenças, independentemente da condição. Somente então a expressão é avaliada. Caso ela seja não nula (verdadeira), então todo o bloco de sentenças será executado novamente. Este processo se repete até que a expressão resulte em zero (falso). A expressão é sempre avaliada depois da execução do bloco de sentenças. Observação 1: A condição deverá ser colocada, obrigatoriamente, entre parênteses! Observação 2: Não esquecer do ponto-e-vírgula após a expressão! A diferenças entre a estrutura while e dowhile é sutil. Ela está no momento quando a condição de repetição é verificada: antes ou depois de executar o bloco de sentenças. A escolha dependerá do bom senso do programador, que optará pela estrutura que deixar o algoritmo mais simples e legível. Exemplo Para imprimir os números de 1 até 10: int numero = 1; do { printf("%d\n", numero); numero = numero + 1; while (numero <= 10); Consulte: EstruturasRepeticao\dowhile01\dowhile01.vcproj Declaramos uma variável numero que controlará o dowhile. Ela armazena o próximo valor a ser impresso. A expressão verifica se o número está dentro do limite desejado (menor ou igual a 10). O bloco de sentenças é executado, imprimindo o valor de numero e aumentado seu valor em uma unidade. Após executar o bloco, a expressão verifica se a variável numero continua dentro do limite permitido. Caso afirmativo, o bloco é executado novamente. Assim, o bloco é executado quando numero armazenar 1, 2, 3,, 9 e 10. Copyright@2005,2006,2007,2008: Arnaldo V. Moura, Daniel F. Ferber 6
7 No final da execução, o valor da variável numero será 11, que foi justamente o valor que tornou a expressão falsa, impedindo uma nova execução do bloco dowhile. Estrutura de repetição dowhile em uma linha Quando o bloco da estrutura dowhile contém apenas uma única sentença, pode-se omitir as chaves que delimitam o bloco como na Figura 6. No entanto, essa forma não delimita claramente o código do restante do programa. Por ser mais confusa, evite a forma abreviada! Exemplo O programa MDC apresentado para a estrutura de repetição while pode ser re-escrito com um dowhile. Este programa calcula o máximo divisor comum (MDC) entre dois números positivos. Código Fonte #include <stdio.h> #include <stdlib.h> int main(int argc, char *argv[]) { int numeroa; int numerob; int resto; printf("digite dois numeros (ordem crescente): "); scanf("%d %d", &numeroa, &numerob); do { resto = numerob % numeroa; printf("numerob = %d; numeroa = %d; ", numerob, numeroa); printf("resto = %d\n", resto); numerob = numeroa; numeroa = resto; while (numeroa > 0); // ou while (resto > 0); printf("mdc: %d", numerob); return 0; Sintaxe: do sentença while (expressão); Figura 6 Sintaxe abreviada da estrutura condicional dowhile Consulte: EstruturasRepeticao\mdc02\mdc02.vcproj Descrição passo a passo O programa segue a mesma lógica do programa anterior. A descrição a seguir foca somente nas diferenças entre as estruturas de repetição. do { resto = numerob % numeroa; numerob = numeroa; numeroa = resto; while (numeroa > 0); Copyright@2005,2006,2007,2008: Arnaldo V. Moura, Daniel F. Ferber 7
8 Cada repetição divide um valor pelo outro e guarda o resto. Quando o resto for nulo, o valor do MDC foi encontrado e a repetição é terminada. Exemplo de execução Digite dois numeros (ordem crescente): numerob = 36; numeroa = 30; resto = 6 numerob = 30; numeroa = 6; resto = 0 MDC: 6 Operadores de incremento Talvez você tenha observado que, freqüentemente, as estruturas de repetição utilizam variáveis para controlar o número de repetições. No exemplo de imprimir números de 1 a 10, no final de cada iteração tínhamos: numero = numero + 1; Em C, a sentença acima significa que a variável numero recebe um novo valor devido ao operador de atribuição. O novo valor é calculado da seguinte forma: somando-se 1 ao valor da variável no lado direito da atribuição. Como este tipo de atribuição é muito freqüente, a linguagem C oferece atalhos que podem facilitam a sintaxe dessas operações: Para: Use o atalho: Forma original: Somar uma unidade ao valor da variável Subtrair uma unidade do valor da variável ++numero; numero = numero + 1; (retorne numero) --numero; numero = numero - 1; (retorne numero) Observação: 1. É comum que programadores experientes utilizem estes operadores dentro de expressões complexas, até mesmo dentro das próprias condições que controlam a execução de um while. No momento, utilizaremos estes operadores apenas em expressões simples. É preferível criar um código simples e de fácil entendimento do que um código compacto e mais difícil de entender. 2. O novo valor é atribuído à variável, cujo valor estará acrescido de uma unidade. 3. O novo valor, já acrescido da unidade, é retornado como o valor do cálculo da expressão. Copyright@2005,2006,2007,2008: Arnaldo V. Moura, Daniel F. Ferber 8
9 Exemplo Para imprimir os números de 1 até 10 com while: int numero = 1; while (numero <= 10) { printf("%d\n", numero); ++numero; O mesmo exemplo com dowhile int numero = 1; do { printf("%d\n", numero); ++numero; while (numero <= 10); Consulte: EstruturasRepeticao\while02\while02.vcproj Consulte: EstruturasRepeticao\dowhile02\dowhile02.vcproj Existem comandos semelhantes aos anteriores, mas que retornam os valores que estavam armazenados nas variáveis antes de se realizar as operações de incremento ou de decremento. Para: Use o atalho: Forma original: Somar um ao valor da variável, retornando o valor original Subtrair um do valor da variável, retornando o valor original Exemplo int numero = 1, val = 10; numero++; numero--; val = numero--; printf("val = %d, numero = %1d\n", val, numero); (retorne numero) numero = numero + 1; (retorne numero) numero = numero - 1; Este trecho de código imprimirá: val = 1, numero = 0 Observe que o novo valor da variável val é 1, ou seja, é o valor original de numero. Esse é o valor retornado pela expressão. Porém, o novo valor que é atribuído para numero é 0, ou seja, é o resultado da operação de decréscimo. Operações aritméticas na forma geral variavel = variavel op expressao Copyright@2005,2006,2007,2008: Arnaldo V. Moura, Daniel F. Ferber 9
10 onde op é um dos operadores aritméticos, também ocorrem com bastante freqüência. Nesses casos, podemos escrever essas atribuições de forma simplificada como variavel op= expressao A tabela a seguir ilustra os casos possíveis. Para: Use o atalho: Forma original: Somar k unidades ao valor da variável Subtrair k unidades do valor da variável Multiplicar o valor da variável por k Dividir o valor da variável por k numero += k; numero = numero + k; numero -= k; numero = numero - k; numero *= k; numero = numero * k; numero /= k; numero = numero / k; Estrutura de repetição for Na maioria dos casos, algoritmos necessitam executar um bloco de sentenças por um número específico de vezes. Freqüentemente, utiliza-se uma variável para controlar o número de repetições. Já aprendemos como fazer isso usando o while e o dowhile (vide exemplos para imprimir números de 1 até 10). Estas situações sempre apresentam uma variável contadora e as quatro etapas seguintes: Inicialização: Atribui um valor inicial à variável contadora. Teste: Verifica uma condição antes de decidir se executará o bloco de sentenças. Caso a condição seja falsa, interrompe as repetições. Execução: Executa o bloco de sentenças. Atualização: Atualiza a variável contadora para o próximo valor. Vamos ilustrar com nosso primeiro exemplo, imprimir números de 1 até 10. int numero = 1; // Inicialização while (numero <= 10) { // Teste printf("%d\n", numero); // Execução numero = numero + 1; // Atualização O grande número de situações que requerem esta lógica justifica a próxima estrutura de repetição. Ela apresenta, de forma compacta, as etapas de inicialização, do teste e da atualização. Copyright@2005,2006,2007,2008: Arnaldo V. Moura, Daniel F. Ferber 10
11 0 início inicialização teste 1 sentença(s) Sintaxe: for (inicialização; teste; atualização) { sentença; sentença; Figura 8 Sintaxe da estrutura de repetição for atualização fim Figura 7 Fluxo de controle da estrutura de repetição for Um for sempre está acompanhado de uma variável contadora que armazena quantas vezes o bloco de sentenças do for deve ser executado. Na Figura 7 observamos que o programa faz a inicialização, que atribui o valor inicial à variável contadora. Em seguida avalia a expressão, que determina se o valor da variável contadora está dentro do limite desejado. Caso positivo, o bloco de sentenças é executado e, em seguida, é executada a atualização, que altera o valor da variável contadora. O processo se repete avaliando novamente a expressão. A sintaxe da estrutura for está na ilustrada na Figura 8. Tipicamente, uma estrutura for ocorre como no modelo abaixo: int contador; for (contador = 1; contador <= 10; contador++) { Exemplo Para imprimir os números de 1 até 10: int numero; for (numero = 1; numero <= 10; numero++) { printf("%d ", numero); Consulte: EstruturasRepeticao\for01\for01.vcproj Declaramos uma variável numero que servirá como contador para o for. Ela armazenará a contagem de repetições. O for executa o bloco contendo o comando printf várias vezes, variando o valor da variável numero de 1 até 10. Observe a forma simplificada da escrita da expressão de atualização. Resultado: Copyright@2005,2006,2007,2008: Arnaldo V. Moura, Daniel F. Ferber 11
12 Para imprimir os números de 1 até 20, de 2 em 2: int numero; for (numero = 1; numero <= 20; numero += 2) { printf("%d ", numero); Consulte: EstruturasRepeticao\for02\for02.vcproj A diferença está na atualização, que aumenta o valor de numero em duas unidades a cada repetição do bloco. Observe a forma simplificada da expressão de atualização. Resultado: Para imprimir os números de 10 até 1: int numero; for (numero = 10; numero >= 1; numero--) { printf("%d ", numero); Consulte: EstruturasRepeticao\for03\for03.vcproj Ao invés de iniciar a variável numero com 1, ela é agora iniciada com 10. A cada repetição, a atualização deve reduzir o valor da variável correspondente em uma unidade. Portanto, podemos escrever numero--. A condição deve verificar agora se o valor de numero é maior ou igual a 1. Resultado: Além de condensar uma lógica recorrente de programação em poucas linhas, o for possui outras duas vantagens importantes: O seu cabeçalho agrupa todas as instruções mais importantes que controlam a execução do for: a inicialização, o teste e a atualização. O programador é obrigado a declarar toda a lógica de execução em uma única linha e de uma só vez. Em uma estrutura while, um erro muito comum é o programador esquecer de inicializar ou atualizar a variável de controle. O cabeçalho separa claramente as instruções de controle de repetição das instruções de execução. No exemplo para imprimir números de 1 a 10 sem o uso do for a variável contadora é atualizada logo após a impressão. Em programas mais elaborados, as instruções de atualização tendem a ficarem escondidas ou diluídas dentro das demais instruções, tornando o programa obscuro e suscetível a erros de programação. Toda a estrutura for é equivalente a um while. A escolha entre uma estrutura ou outra é uma questão de gosto e estilo de programação. Use o bom senso para realizar sua escolha. Observação: Note a ordem correta das declarações no cabeçalho: inicialização, teste e atualização! Não esqueça do ponto-e-vírgula separando as declarações. Todo o cabeçalho deverá estar obrigatoriamente entre parênteses! Copyright@2005,2006,2007,2008: Arnaldo V. Moura, Daniel F. Ferber 12
13 Estrutura de repetição for em uma linha Sintaxe: for (inicialização; teste; atualização) sentença; Figura 9 Sintaxe abreviada da estrutura condicional for Quando o bloco da estrutura for contém apenas uma única sentença, pode-se omitir as chaves que delimitam o bloco, tal como na Figura 9. No entanto, essa forma não delimita claramente o código a ser executado repetidamente do restante do programa. Por ser mais confusa, evite a forma abreviada! Exemplo Este programa imprime todos os divisores de um número. Para um dado número n, o programa testa todos os números de 1 até n. Código Fonte #include <stdio.h> #include <stdlib.h> int main(int argc, char *argv[]) { int numero; int divisor; int resto; printf("digite o numero: "); scanf("%d", &numero); for (divisor = 1; divisor <= numero; divisor++) { resto = numero % divisor; if (resto == 0) { printf("divisor encontrado: %d \n", divisor); return 0; Consulte: EstruturasRepeticao\Divisores02\Divisores02.vcproj Descrição passo a passo O programa utiliza a mesma lógica que o exemplo apresentado para a estrutura while. A discussão atém-se somente às diferenças na estrutura de repetição. for (divisor = 1; divisor <= numero; divisor++) { resto = numero % divisor; if (resto == 0) { printf("divisor encontrado: %d \n", divisor); A repetição é controlada pelo valor da variável divisor. Ela é iniciada com 1 e a repetição ocorre enquanto ela contiver valores menores ou iguais ao valor de Copyright@2005,2006,2007,2008: Arnaldo V. Moura, Daniel F. Ferber 13
14 numero. Dentro do bloco for, calcula-se o resto da divisão. Caso ele seja zero, significa que encontramos um divisor. Primeiro exemplo de execução: Digite o numero: 100 Divisor encontrado: 1 Divisor encontrado: 2 Divisor encontrado: 4 Divisor encontrado: 5 Divisor encontrado: 10 Divisor encontrado: 20 Divisor encontrado: 25 Divisor encontrado: 50 Divisor encontrado: 100 Segundo exemplo de execução: Digite o numero: 19 Divisor encontrado: 1 Divisor encontrado: 19 Casos de Uso Um programa pode ser escrito corretamente tanto com while, como com dowhile como com for. A escolha da estrutura cabe ao programador, que deve preferir aquela que produz código mais simples e fácil de entender. while (expressão) { Objetivo: Executar o bloco apenas enquanto uma condição for verdadeira. Se a condição for falsa logo no início, o bloco não é executado nenhuma vez. Sugerido quando: Não há necessidade de inicializar ou atualizar variáveis contadoras. As etapas de inicialização ou atualização requerem muitas instruções e não caberiam elegantemente numa única linha do for. As informações necessárias para avaliar a condição não dependem de uma variável contadora ou são obtidas durante a execução do bloco. Nestes três casos anteriores, prefira um while ao invés do for. do { while (expressão); Objetivo: Executar o bloco pelo menos uma vez e repetir enquanto uma condição for verdadeira. Sugerido quando: É necessário executar um bloco pelo menos uma vez para obter as informações necessárias para avaliar a condição. É muito comum utilizar o dowhile para leitura de dados. Um uso típico poderia ser repetir a leitura enquanto o dado não for válido. for (inicialização; teste; reinicialização) { Objetivo: Executar o bloco um certo número de vezes, controlado por uma variável contadora. Copyright@2005,2006,2007,2008: Arnaldo V. Moura, Daniel F. Ferber 14
15 Sugerido quando: O número de repetições é controlado por uma variável controladora. Há necessidade de inicialização e atualização, mas que sejam simples o suficiente para que sejam acomodadas na linha do for. Para casos mais complexos, é melhor usar o comando while. A avaliação da condição não depende de dados obtidos na execução do bloco. Considere o uso do for para separar claramente as instruções do controle de repetição (inicialização e atualização) das demais instruções do bloco. Mas adiante, o for será uma ferramenta útil para percorrer elementos de vetores, listas e matrizes. A variável contadora do for será justamente um índice do vetor ou da matriz. Exemplos Típicos Para entender melhor quando utilizar cada uma das estruturas, analisaremos alguns exemplos que exigem execução repetida do mesmo bloco de código. Caso 1, usando for: Ler uma quantidade fixa de valores Primeiro, o usuário informa a quantidade de valores disponíveis e em seguida informa cada um dos valores. O programa calcula a média dos números lidos. Neste caso, será conveniente utilizar um for, pois vemos que: Podemos usar uma variável contadora para controlar o número de repetições para a leitura dos valores. Há necessidade de inicializar e atualizar esta variável contadora. A inicialização e a atualização são instruções simples, e que podem ser acomodadas facilmente em uma linha do for. É conveniente separar a inicialização e atualização do bloco que calcula a média. Código fonte: #include <stdio.h> #include <stdlib.h> int main(int argc, char *argv[]) { int quantidade; int contador; double valor; double soma = 0; double media; // Solicita a quantidade de números que devem ser lidos printf("quantidade de valores: "); scanf("%d", &quantidade); // Solicita cada um dos números e soma-o for (contador = 1; contador <= quantidade; contador++) { printf("valor: "); scanf("%lf", &valor); soma += valor; media = soma / quantidade; printf("média: %f", media); return 0; Copyright@2005,2006,2007,2008: Arnaldo V. Moura, Daniel F. Ferber 15
16 Descrição passo a passo: int quantidade; int contador; double valor; double soma = 0; double media; Consulte: EstruturasRepeticao\Caso1\Caso1.vcproj O programa começa declarando as variáveis. A variável quantidade armazenará o número de valores lidos para calcular a média. A variável contador conterá quantos valores já foram lidos. Já a variável valor armazenará o valor lido mais recentemente. E soma guardará a soma de todos os valores que são lidos. Finalmente, media armazenará o resultado calculado no final do programa. printf("quantidade de valores: "); scanf("%d", &quantidade); O programa solicita que o usuário digite o número de valores que devem ser lidos para calcular a média. for (contador = 1; contador <= quantidade; contador++) { printf("valor: "); scanf("%lf", &valor); soma += valor; O for executa o bloco repetidamente, uma vez para cada valor de contador entre 1 e o número armazenado em quantidade. A cada repetição, solicita um número, o qual é somado ao valor anterior em soma, e que substitui o antigo valor nessa variável. media = soma / quantidade; printf("média: %f", media); No final, o programa calcula a média e apresenta o valor. Exemplo de execução: Quantidade de valores: 5 Valor: 3 Valor: 5 Valor: 4 Valor: 6 Valor: 5 Média: O que ocorre quando o usuário entra um valor zero ou negativo para quantidade? Modifique o programa para se precaver contra esses casos. Caso 2, usando while: Ler uma quantidade fixa de valores O mesmo programa pode ser escrito usando while, mas torna o código um pouco menos evidente. Copyright@2005,2006,2007,2008: Arnaldo V. Moura, Daniel F. Ferber 16
17 #include <stdio.h> #include <stdlib.h> int main(int argc, char *argv[]) { int quantidade; int contador; double valor; double soma = 0; double media; // Solicita a quantidade de números que devem ser lidos printf("quantidade de valores: "); scanf("%d", &quantidade); // Solicita cada um dos números e soma-o contador = 1; while (contador <= quantidade) { printf("valor: "); scanf("%lf", &valor); soma += valor; contador++; // Calcula e mostra a média media = soma / quantidade; printf("media: %f", media); return 0; Consulte: EstruturasRepeticao\Caso2\Caso2.vcproj Caso 3, usando while: Ler uma quantidade desconhecida de valores Desejamos calcular a média de uma lista de números não negativos, de comprimento arbitrário. O usuário escreve a lista de números, indicando o fim da lista com um número negativo. Neste caso, será conveniente utilizar um while, pois vemos que: Não sabemos quantos dados serão digitados e, portanto, não podemos usar diretamente uma variável que controla o número de repetições da leitura do valor. As informações necessárias para avaliar a condição são obtidas durante a execução do bloco. Código fonte: #include <stdio.h> #include <stdlib.h> int main(int argc, char *argv[]) { int quantidade = 0; double valor; double soma = 0; double media; // Solicita cada um dos números e soma-o scanf("%lf", &valor); while (valor >= 0.0) { soma += valor; quantidade++; Copyright@2005,2006,2007,2008: Arnaldo V. Moura, Daniel F. Ferber 17
18 scanf("%lf", &valor); // Calcula e mostra a média media = soma / quantidade; printf("media: %f", media); return 0; Descrição passo a passo: int quantidade = 0; double valor; double soma = 0; double media; O programa declara variáveis como nos exemplos anteriores. Consulte: EstruturasRepeticao\Caso3\Caso3.vcproj scanf("%lf", &valor); while (valor >= 0.0) { soma += valor; quantidade++; scanf("%lf", &valor); A diferença está no uso da estrutura while para determinar o momento para terminar a repetição da leitura. O programa precisa ler o primeiro número antes de verificar a condição, o que justifica o scanf antes do while. Se ele for não negativo, então ele é somado no bloco do while. A variável quantidade é aumentada em uma unidade para saber quanto números foram somados até agora. Esse valor será necessário para o cálculo da média. Por fim, é necessário ler o próximo número antes de avaliar novamente a condição do while. Por este motivo, a última linha do bloco contém um scanf para ler tal número. media = soma / quantidade; printf("media: %f", media); A média é calculada da mesma forma como nos dois exemplos anteriores. O que ocorre se a lista de números for vazia, isto é, o usuário entra logo com um primeiro valor que é negativo? Melhore o programa de forma que evite essa condição de contorno. Exemplo de execução: Escreva os valores, terminando com um número negativo Media: Caso 4, usando dowhile: Ler uma quantidade desconhecida de valores O programa anterior pode ser reescrito usando a estrutura dowhile. Código Fonte: #include <stdio.h> #include <stdlib.h> Copyright@2005,2006,2007,2008: Arnaldo V. Moura, Daniel F. Ferber 18
19 int main(int argc, char *argv[]) { int quantidade = 0; double valor; double soma = 0; double media; // Solicita cada um dos números e soma-o printf("escreva os valores, terminando com um número negativo.\n"); do { scanf("%lf", &valor); if (valor >= 0.0) { soma += valor; quantidade++; while (valor >= 0.0); // Calcula e mostra a média media = soma / quantidade; printf("media: %f", media); return 0; Consulte: EstruturasRepeticao\Caso4\Caso4.vcproj Descrição passo a passo: Este programa é semelhante ao caso anterior, variando apenas no uso da estrutura dowhile ao invés do while. O primeiro comando executado no bloco é o comando scanf, que lê o próximo valor. Se este valor for maior ou igual a zero, então ele é somando para o cálculo da média. Repare como agora resolvemos o problema usando o scanf apenas uma vez. Por outro lado, precisamos sempre testar o valor lido dentro do bloco do scanf. Poderíamos ter evitado o teste, sempre somando o valor lido dentro do bloco, mas desde que tenhamos o cuidado de, após terminada a execução do dowhile, subtrairmos o último valor somado, que terá sido somado indevidamente. A condição se saída verifica se o último valor lido é maior ou igual a zero e repete o bloco caso afirmativo. Comparação com o programa anterior Para este programa, é difícil decidir qual estrutura de repetição é mais vantajosa: o while o dowhile. Os dois programas são idênticos quanto ao resultado produzido. O dowhile é menos elegante pois é necessário verificar a condição duas vezes e por exigir um if dentro do dowhile. O while, tem o inconveniente de exigir duas linhas com o comando scanf. Caso 5, usando dowhile : executar até que o usuário decida parar Podemos mostrar um uso interessante do dowhile com o seguinte programa. Ele é idêntico ao caso 1, mas com a opção de ser executado várias vezes. Depois de calcular a média, o programa pergunta ao usuário se ele deseja repetir tudo de novo, para calcular uma nova média sobre novos números. Copyright@2005,2006,2007,2008: Arnaldo V. Moura, Daniel F. Ferber 19
20 Código Fonte: #include <stdio.h> #include <stdlib.h> int main(int argc, char *argv[]) { int quantidade; int contador; double valor; double soma; double media; char repetir; do { // Solicita a quantidade de números que devem ser lidos printf("quantidade de valores: "); scanf("%d", &quantidade); soma = 0; // inicializa soma com 0, inclusive nas demais iteracoes // Solicita cada um dos números e soma-o for (contador = 1; contador <= quantidade; contador++) { printf("valor: "); scanf("%lf", &valor); soma += valor; // Calcula e mostra a média media = soma / quantidade; printf("media: %f\n\n", media); printf("deseja executar o programa novamente? (s/n) "); scanf(" %c", &repetir); while (repetir == 's'); return 0; Consulte: EstruturasRepeticao\Caso5\Caso5.vcproj Descrição passo a passo: Note que o bloco dowhile é idêntico ao programa do caso 1. No fim da execução do bloco, após mostrar a média, o programa solicita que o usuário digite uma das letras s ou n, para informar se ele quer executar novamente. A condição do dowhile é tal que, enquanto o usuário terminar o bloco com a letra s, o programa é executado novamente. Exemplo de execução: Quantidade de valores: 5 Valor: 3 Valor: 4 Valor: 3 Valor: 6 Valor: 5 Media: Deseja executar o programa novamente? (s/n) s Quantidade de valores: 3 Valor: 6 Valor: 8 Valor: 9 Copyright@2005,2006,2007,2008: Arnaldo V. Moura, Daniel F. Ferber 20
21 Media: Deseja executar o programa novamente? (s/n) n Copyright@2005,2006,2007,2008: Arnaldo V. Moura, Daniel F. Ferber 21
22 Controle de Repetição Forçar interrupção de repetição: break O comando break é um modo conveniente de terminar imediatamente a execução de um bloco controlado por uma estrutura de repetição, sem necessidade de esperar a próxima avaliação da condição. O comando break é útil para interromper a execução de uma estrutura de repetição quando fica evidente que as demais repetições não produzirão novos resultados. Assim, o programa pode economizar algum tempo de execução. No próximo exemplo, que verifica se um número é primo, o comando break será usado para interromper as repetições assim que mais de dois divisores forem encontrados. A Figura 10 ilustra o desvio no fluxo de execução causado pelo comando break. O break não espera o término da execução do restante do bloco. As linhas tracejadas mostram o while (expressão) { sentenças(s); if (condição) { break; sentenças(s); do { sentenças(s); if (condição) { break; sentenças(s); while (expressão); for (inicialização; teste; atualização) { sentenças(s); if (condição) { break; sentenças(s); início início início inicialização 0 expressão 1 sentença(s) break 0 teste 1 sentença(s) break 1 expressão sentença(s) break fim 0 fim atualização Figura 10 Fluxo de controle em estruturas de repetição com break fluxo convencional. A linha contínua representa o fluxo caso o break seja executado. fim Copyright@2005,2006,2007,2008: Arnaldo V. Moura, Daniel F. Ferber 22
23 Observação: O uso do comando break costuma estar associado à uma estrutura condicional if para que a interrupção seja realizada somente sob determinadas condições excepcionais. Exemplo Um programa que verifica se um número é primo ou não. O programa utiliza o mesmo algoritmo que já vimos para encontrar os divisores de um número. Note que o número primo contém exatamente dois divisores (1 e o próprio número). Portanto, assim que o terceiro divisor for encontrado, ficará evidente que o número não é primo. Nesta situação, o programa utiliza o break para terminar a execução do while, evitando continuar as iterações seguintes, que não seriam úteis. Código fonte #include <stdio.h> #include <stdlib.h> int main(int argc, char *argv[]) { int numero; int divisor; int resto; int numero_divisores; printf("digite o numero: "); scanf("%d", &numero); numero_divisores = 0; for (divisor = 1; divisor <= numero; divisor++) { resto = numero % divisor; if (resto == 0) { numero_divisores = numero_divisores + 1; if (numero_divisores >= 3) { break; if (numero_divisores == 2) { printf("o numero %d eh primo!\n", numero); else { printf("o numero %d NAO eh primo!\n", numero); return 0; Descrição passo a passo int numero; int divisor; int resto; int numero_divisores; Consulte: ControleExecucao\Divisores03\Divisores03.vcproj A variável numero armazena o valor digitado pelo usuário. A variável divisor é um contador para armazenar o próximo candidato a divisor a ser testado. A variável resto é usada para armazenamento temporário dentro do bloco de repetição do for. E numero_divisores conta quantos divisores foram encontrados até o momento. Copyright@2005,2006,2007,2008: Arnaldo V. Moura, Daniel F. Ferber 23
24 numero_divisores = 0; for (divisor = 1; divisor <= numero; divisor++) { A repetição é controlada pelo valor da variável divisor. Ela inicializa em 1 e a repetição ocorre enquanto ela contiver valores menores ou iguais ao próprio número. resto = numero % divisor; if (resto == 0) { numero_divisores++; if (numero_divisores >= 3) { break; O código executado dentro da repetição calcula o resto da divisão. Sendo ele zero, significa que encontramos um divisor. Neste caso, o contador numero_divisores é atualizado. Verifica-se então se numero_divisores ultrapassou o número máximo de divisores para um número primo (2 divisores). Se verdadeiro, o break interrompe imediatamente a execução do for, independente de quantas repetições ainda faltem. if (numero_divisores == 2) { printf("o numero %d eh primo!\n", numero); else { printf("o numero %d NAO eh primo!\n", numero); No final, se o número de divisores for 2, então temos um número primo. Em qualquer caso, uma mensagem é impressa informando este resultado. Note que o número 1 não é considerado primo. Nesse caso, o funcionamento do programa também é correto, pois apenas um divisor (ele mesmo) será encontrado. Primeiro exemplo de execução Digite o numero: 5 O numero 5 eh primo! Primeiro exemplo de execução Digite o numero: 10 O numero 10 NAO eh primo! Reiniciar repetição: continue O comando continue reinicia imediatamente a execução de um bloco de uma estrutura de repetição. O continue não espera o término da execução do restante do bloco. No caso do while, a execução retorna imediatamente para avaliar a expressão, antes de executar novamente o bloco, se for o caso. Se a expressão avaliar como falso, então o while é finalizado, caso contrário ele realiza uma nova iteração. Copyright@2005,2006,2007,2008: Arnaldo V. Moura, Daniel F. Ferber 24
25 Para o for, o continue interrompe a execução normal do bloco, realiza imediatamente a atualização das variáveis de controle para, em seguida, realizar novamente o teste. Se o teste resultar em falso, então o for é finalizado, caso contrário ele realiza uma nova iteração. No dowhile, o continue simplesmente inicia uma nova iteração, no início do bloco. O comando continue é útil para avançar para a próxima repetição quando fica evidente que a execução atual do bloco não se faz mais necessária. Veja o próximo exemplo para imprimir a tangente de ângulos de 0º a 180º. Quando a iteração chega ao ângulo de 90º, é acionado o comando continue para avançar para o próximo ângulo, já que não existe tangente de 90º. Observação: O uso do comando continue costuma estar associado com uma estrutura condicional if para que a repetição seja reiniciada somente sob determinadas condições. A Figura 11 ilustra o desvio no fluxo de execução causado pelo comando continue. As linhas tracejadas mostram o fluxo convencional. A linha contínua representa o fluxo caso o continue seja executado. while (expressão) { comandos(s); if (condição) { continue; comandos(s); do { comandos(s); if (condição) { continue; comandos(s); while (expressão); for (inicialização; teste; atualização) { comandos(s); if (condição) { continue; comandos(s); início início início inicialização 0 expressão 1 sentença(s) continue 0 teste 1 sentença(s) continue 1 expressão sentença(s) continue 0 fim fim atualização Figura 11 Fluxo de controle em estruturas de repetição com continue fim Copyright@2005,2006,2007,2008: Arnaldo V. Moura, Daniel F. Ferber 25
26 Exemplo: Um programa que imprime uma tabela com a imagem da função tangente, em intervalos de 10 em 10 graus. Código fonte #include <stdio.h> #include <stdlib.h> #include <math.h> int main(int argc, char *argv[]) { double angulo; double pi = ; for (angulo = 0; angulo <= 180; angulo += 10.0) { if (angulo == 90.0) { continue; printf("tan(%f) = %f\n", angulo, tan(angulo/180*pi)); return 0; Descrição passo a passo double angulo; double pi = ; Consulte: ControleExecucao\Tangete01\Tangente01.vcproj A variável angulo percorre o intervalo de zero até 180 graus. Já pi é uma variável usada para realizar a conversão de graus para radianos. for (angulo = 0; angulo <= 180; angulo += 10.0) { if (angulo == 90.0) { continue; O for executa o bloco para diferentes valores de ângulos, em passos de 10 em 10 graus. No entanto, ao chegar ao valor de 90 graus, a função tangente não está definida! Por este motivo, este valor precisa ser ignorado. Para tal, utiliza-se o comando continue para reiniciar o for com o próximo valor (ou seja, 100 graus). printf("tan(%f) = %f\n", angulo, tan(angulo/180*pi)); O comando printf é simples. Ele imprime o ângulo e o valor da função tangente. No entanto, antes, é necessário realizar uma conversão para radianos, que é o formato esperado pela função tan. Exemplo de execução tan( ) = tan( ) = tan( ) = tan( ) = tan( ) = tan( ) = tan( ) = Copyright@2005,2006,2007,2008: Arnaldo V. Moura, Daniel F. Ferber 26
27 tan( ) = tan( ) = tan( ) = tan( ) = tan( ) = tan( ) = tan( ) = tan( ) = tan( ) = tan( ) = tan( ) = Fluxo de execução arbitrário: goto O comando goto tem por finalidade desviar a execução do programa para qualquer outro ponto do programa, desconsiderando qualquer estrutura de repetição ou estrutura condicional. O goto pode desviar a execução para um ponto anterior na seqüência (retrocesso), como também pode saltar para qualquer ponto situado mais para frente na seqüência (avanço). Em qualquer um dos casos, é necessário declarar uma marca que será o destino do goto. A marca é um identificador seguido por dois-pontos ( : ). O nome desse identificador segue as mesmas regras de escolha de nomes para variáveis. Sintaxe: Sintaxe: sentença(s); marca1: sentença(s); goto marca1; sentença(s); Figura 12 Sintaxe goto: retrocesso sentença(s); goto marca2; sentença(s); marca2: sentença(s); Figura 13 Sintaxe goto: avanço Exemplo: Imprimir os números de 1 até 10. Código fonte: #include <stdio.h> #include <stdlib.h> /* * Imprime números de 1 até 10, usando apenas GOTO. */ int main() { int numero = 1; inicio_repeticao: if (numero > 10) { goto fim_repeticao; printf("%d ", numero); numero++; goto inicio_repeticao; fim_repeticao: return 0; Consulte: ControleRepeticao\Goto01\Goto01.vcproj Copyright@2005,2006,2007,2008: Arnaldo V. Moura, Daniel F. Ferber 27
28 Descrição passo a passo: int numero = 1; O programa começa declarando a variável numero, que recebe o valor inicial 1. Essa variável servirá de contador de repetições. inicio_repeticao: Em seguida, declara-se uma marca, que identifica o inicio do código que deverá ser repetido 10 vezes. fim_repeticao: No final do programa, declara-se outra marca, para definir o ponto para onde saltar após a execução das 10 iterações. if (numero > 10) { goto fim_repeticao; Assim que o contador de iterações ultrapassar o valor máximo permitido, o programa é instruído a saltar para o ponto fim_repeticao, localizado no final do código. printf( %d\n, numero); numero++; goto inicio_repeticao; O programa imprime o número e atualiza a variável contadora. O comando goto força um desvio para o início do laço, de modo a realizar novamente todas as operações para o próximo número na seqüência. Exemplo de execução: Casos de uso do goto Todos as estruturas de repetição podem ser escritas utilizando-se apenas marcas e gotos. Mesmo assim, o emprego de goto não é recomendado por vários motivos, entre eles: Dificulta a visualização do destino de cada goto. Oculta a estrutura lógica e de execução do programa. Com o uso de while e for, é fácil identificar as condições de repetição, a inicialização e a atualização de variáveis, como também o bloco que deve ser repetido. Com gotos, os blocos não estarão mais realçados por delimitações. Cada programador pode adotar sua própria lógica de fluxo de execução. Os programas tornar-se-ão incompreensíveis e muito difíceis e entender e de manter! Toda a lógica embutida em um goto pode sempre ser re-escrita de forma muito mais elegante usando os comandos while, dowhile, for e, se necessário, também os comandos break e continue. Copyright@2005,2006,2007,2008: Arnaldo V. Moura, Daniel F. Ferber 28
José Romildo Malaquias 2011-1
Programação de Computadores I Aula 08 Programação: Estruturas de Repetição José Romildo Malaquias Departamento de Computação Universidade Federal de Ouro Preto 2011-1 1/58 Motivação Como imprimir os três
Vetores. Vetores. Figura 1 Exemplo de vetor com 10 elementos
Vetores Nos capítulos anteriores estudamos as opções disponíveis na linguagem C para representar: Números inteiros em diversos intervalos. Números fracionários com várias alternativas de precisão e magnitude.
Estruturas de Repetição
Estruturas de Repetição Introdução As estruturas de repetição, permitem executar mais de uma vez um mesmo trecho de código. Trata-se de uma forma de executar blocos de comandos somente sob determinadas
Resumo da Matéria de Linguagem de Programação. Linguagem C
Resumo da Matéria de Linguagem de Programação Linguagem C Vitor H. Migoto de Gouvêa 2011 Sumário Como instalar um programa para executar o C...3 Sintaxe inicial da Linguagem de Programação C...4 Variáveis
OPERADORES E ESTRUTURAS DE CONTROLE
OPERADORES E ESTRUTURAS DE CONTROLE 3.1 Operadores Os operadores indicam o tipo de operação matemática que será executada gerando novos valores a partir de um ou mais operadores. São muito utilizados em
Comandos Sequenciais if else, e Switch
Introdução à Programação Comandos Sequenciais if else, e Switch 1º ano - ESI e IGE (2011/2012) Engenheiro Anilton Silva Fernandes ([email protected]) O computador pensa? Muitas vezes utiliza-se a
Linguagem C: Estruturas de Controle. Prof. Leonardo Barreto Campos 1
Linguagem C: Estruturas de Controle Prof. Leonardo Barreto Campos 1 Sumário Estrutura de Controle e de Fluxo Comandos de Seleção: O comando if; Ifs Aninhados; A escada if-else-if; A expressão condicional;
2. OPERADORES... 6 3. ALGORITMOS, FLUXOGRAMAS E PROGRAMAS... 8 4. FUNÇÕES... 10
1. TIPOS DE DADOS... 3 1.1 DEFINIÇÃO DE DADOS... 3 1.2 - DEFINIÇÃO DE VARIÁVEIS... 3 1.3 - VARIÁVEIS EM C... 3 1.3.1. NOME DAS VARIÁVEIS... 3 1.3.2 - TIPOS BÁSICOS... 3 1.3.3 DECLARAÇÃO DE VARIÁVEIS...
Algoritmos de Busca em Tabelas
Dentre os vários algoritmos fundamentais, os algoritmos de busca em tabelas estão entre os mais usados. Considere por exemplo um sistema de banco de dados. As operações de busca e recuperação dos dados
9 Comandos condicionais
9 Comandos condicionais Um comando condicional é uma instrução empregada quando se deseja criar um desvio, isto é, a opção de executar-se ou não um determinado trecho de código, segundo uma condição. Em
INTRODUÇÃO À LINGUAGEM C++
INTRODUÇÃO À LINGUAGEM C++ 1 - VARIÁVEIS Variáveis espaço de memória reservado para armazenar tipos de dados, com um nome para referenciar seu conteúdo. Observações importantes Todas as variáveis devem
Programação WEB I Estruturas de controle e repetição
Programação WEB I Estruturas de controle e repetição Operadores de Incremento Operadores de incremento servem como expressões de atalho para realizar incrementos em variáveis Operadores de Incremento Vamos
Estruturas de Repetição
Estruturas de Repetição Lista de Exercícios - 04 Linguagem e Técnicas de Programação Professor: Edwar Saliba Júnior Estruturas de Repetição O que são e para que servem? São comandos que são utilizados
Linguagem e Técnicas de Programação I Operadores, expressões e funções. Prof. MSc. Hugo Souza Material desenvolvido por: Profa.
Linguagem e Técnicas de Programação I Operadores, expressões e funções Prof. MSc. Hugo Souza Material desenvolvido por: Profa. Ameliara Freire Operadores básicos Toda linguagem de programação, existem
Capítulo 2: Introdução à Linguagem C
Capítulo 2: Introdução à Linguagem C INF1005 Programação 1 Pontifícia Universidade Católica Departamento de Informática Programa Programa é um algoritmo escrito em uma linguagem de programação. No nosso
INF 1005 Programação I
INF 1005 Programação I Aula 03 Introdução a Linguagem C Edirlei Soares de Lima Estrutura de um Programa C Inclusão de bibliotecas auxiliares: #include Definição de constantes:
Estruturas de entrada e saída
capa Estruturas de entrada e saída - A linguagem C utiliza de algumas funções para tratamento de entrada e saída de dados. - A maioria dessas funções estão presentes na biblioteca . - As funções
20 Caracteres - Tipo char
0 Caracteres - Tipo char Ronaldo F. Hashimoto e Carlos H. Morimoto Até agora vimos como o computador pode ser utilizado para processar informação que pode ser quantificada de forma numérica. No entanto,
LINGUAGEM C: DESCOMPLICADA. Prof. André R. Backes
LINGUAGEM C: DESCOMPLICADA Prof. André R. Backes 1 COMANDOS DE CONTROLE CONDICIONAL Os programas escritos até o momento são programas sequeciais: um comando é executado após o outro, do começo ao fim do
Aluísio Eustáquio da Silva
1 Aluísio Eustáquio da Silva SciLab Programável Material didático usado em aulas de Programação de Computadores, Algoritmos e Lógica de Programação Betim Maio de 2012 2 PROGRAMAÇÃO O SciLab permite que
1 Resumo: Strings e vetores de caracteres. Departamento de Ciência da Computação IME/USP
Departamento de Ciência da Computação MAC2166 Introdução a Computação IME/USP Strings e vetores de caracteres 1 Resumo: O uso de strings facilita a manipulação de palavras e textos. Strings são basicamente
Introdução a Algoritmos Parte 04
Universidade Federal do Vale do São Francisco Curso de Engenharia de Computação Introdução a Algoritmos Parte 04 Prof. Jorge Cavalcanti [email protected] www.univasf.edu.br/~jorge.cavalcanti
Algoritmos e Estruturas de Dados I 01/2013. Estruturas Condicionais e de Repetição (parte 2) Pedro O.S. Vaz de Melo
Algoritmos e Estruturas de Dados I 01/2013 Estruturas Condicionais e de Repetição (parte 2) Pedro O.S. Vaz de Melo Problema 1 Suponha que soma (+) e subtração (-) são as únicas operações disponíveis em
compreender a importância de cada estrutura de controle disponível na Linguagem C;
Aula 3 Estruturas de controle Objetivos Esperamos que, ao final desta aula, você seja capaz de: compreender a importância de cada estrutura de controle disponível na Linguagem C; construir programas em
PROGRAMAÇÃO ESTRUTURADA. CC 2º Período
PROGRAMAÇÃO ESTRUTURADA CC 2º Período PROGRAMAÇÃO ESTRUTURADA Aula 07: Funções O comando return Protótipo de funções O tipo void Arquivos-cabeçalho Escopo de variáveis Passagem de parâmetros por valor
Edwar Saliba Júnior. Dicas, Comandos e Exemplos Comparativos entre Linguagem Algorítmica e Linguagem C / C++
Edwar Saliba Júnior Dicas, Comandos e Exemplos Comparativos entre Linguagem Algorítmica e Linguagem C / C++ Belo Horizonte 2009 Sumário 1 Nota:... 2 2 Comandos e Palavras Reservadas:... 3 3 Dicas... 4
ERROS MAIS COMUNS COMETIDOS EM PROGRAMAS E ALGORITMOS
ERROS MAIS COMUNS COMETIDOS EM PROGRAMAS E ALGORITMOS Compilação dos erros mais comuns cometidos por estudantes de Introdução a Algoritmos Marcos Portnoi Edição 19.4.2007 Universidade Salvador UNIFACS
Orientação a Objetos
1. Domínio e Aplicação Orientação a Objetos Um domínio é composto pelas entidades, informações e processos relacionados a um determinado contexto. Uma aplicação pode ser desenvolvida para automatizar ou
PROGRAMAÇÃO ESTRUTURADA. CC 2º Período
PROGRAMAÇÃO ESTRUTURADA CC 2º Período PROGRAMAÇÃO ESTRUTURADA Aula 06: Ponteiros Declarando e utilizando ponteiros Ponteiros e vetores Inicializando ponteiros Ponteiros para Ponteiros Cuidados a serem
17 - Funções e Procedimentos em C Programação Modular
17 - Funções e Procedimentos em C Programação Modular Unesp Campus de Guaratinguetá Curso de Programação Computadores Prof. Aníbal Tavares Profa. Cassilda Ribeiro Ministrado por: Prof. André Amarante 17
VisuALG Estruturas de Repetição. Professores: Vilson Heck Junior [email protected] Felipe Schneider Costa [email protected].
VisuALG Estruturas de Repetição Professores: Vilson Heck Junior [email protected] Felipe Schneider Costa [email protected] O Problema. Estruturas de Repetição: Introdução; Repita ate; Exemplo;
Curso de C. Procedimentos e Funções. 6/4/200901/04/09 09:42 Copyright@Arnaldo V Moura, Daniel F Ferber 1
Curso de C Procedimentos e Funções 6/4/200901/04/09 09:42 Copyright@Arnaldo V Moura, Daniel F Ferber 1 Funções Roteiro: Funções Declaração e chamada Funções importantes Exemplos de funções Variáveis Globais,
Curso de Programação Computadores
3 O Primeiro Programa em C Unesp Campus de Guaratinguetá Curso de Programação Computadores Prof. Aníbal Tavares Profa. Cassilda Ribeiro 3 O Primeiro Programa em C 3.1 - Introdução Depois dos conceitos
P r o g r a m a ç ã o d e C o m p u t a d o r e s 1 o S e m - 2 0 1 3 P r o f. A n d r é A m a r a n t e L u i z L A B 5 tag %2d while printf PE1:
Inteligência É a faculdade de criar objetos artificiais, especialmente ferramentas para fazer ferramentas. Henri Bergson. WHILE Além dos comandos if-else e switch, o controle de fluxo de um programa pode
ARRAYS. Um array é um OBJETO que referencia (aponta) mais de um objeto ou armazena mais de um dado primitivo.
Cursos: Análise, Ciência da Computação e Sistemas de Informação Programação I - Prof. Aníbal Notas de aula 8 ARRAYS Introdução Até agora, utilizamos variáveis individuais. Significa que uma variável objeto
Exercícios de Fixação Pseudocódigo e Estruturas Básicas de Controle
Disciplina: TCC-00.7 Prog. de Computadores III Professor: Leandro Augusto Frata Fernandes Turma: A- Data: / / Exercícios de Fixação Pseudocódigo e Estruturas Básicas de Controle. Construa um algoritmo
Algoritmos e Programação (Prática) Profa. Andreza Leite [email protected]
(Prática) Profa. Andreza Leite [email protected] Introdução O computador como ferramenta indispensável: Faz parte das nossas vidas; Por si só não faz nada de útil; Grande capacidade de resolução
Python Condicionais e Loops. Introdução à Programação SI1
Python Condicionais e Loops Introdução à Programação SI1 Conteúdo Comando de Decisão Comandos de Repetição Exercícios 13/06/2013 2 Condicional Controle de fluxo É muito comum em um programa que certos
O comando if. O comando condicional permite incluir no programa trechos de código que dependem de uma ou mais condições para sua execução.
O comando if if - else O comando condicional permite incluir no programa trechos de código que dependem de uma ou mais condições para sua execução. O comando condicional tem duas formas básicas: if(condição)
7. Estrutura de Decisão
7. Estrutura de Decisão Neste tipo de estrutura o fluxo de instruções a ser seguido é escolhido em função do resultado da avaliação de uma ou mais condições. Uma condição é uma expressão lógica. A classificação
Module Introduction. Programação. Cap. 4 Algoritmos e Programação Estruturada
5374 : Engenharia Informática 6638 : Tecnologias e Sistemas de Informação 9099 : Bioengenharia 10135 : Ciências Biomédicas Cap. 4 Algoritmos e Estruturada Module Introduction Algoritmos e Estruturada Objectivos:
CAPÍTULO 3 - TIPOS DE DADOS E IDENTIFICADORES
CAPÍTULO 3 - TIPOS DE DADOS E IDENTIFICADORES 3.1 - IDENTIFICADORES Os objetos que usamos no nosso algoritmo são uma representação simbólica de um valor de dado. Assim, quando executamos a seguinte instrução:
Apostila de Fundamentos de Programação I. Prof.: André Luiz Montevecchi
Apostila de Fundamentos de Programação I Prof: André Luiz Montevecchi Introdução O mundo atual é dependente da tecnologia O uso intenso de diversos aparatos tecnológicos é parte integrante do nosso dia-a-dia
Algoritmos e Programação Estruturada
Algoritmos e Programação Estruturada Virgínia M. Cardoso Linguagem C Criada por Dennis M. Ritchie e Ken Thompson no Laboratório Bell em 1972. A Linguagem C foi baseada na Linguagem B criada por Thompson.
LP II Estrutura de Dados. Introdução e Linguagem C. Prof. José Honorato F. Nunes [email protected]
LP II Estrutura de Dados Introdução e Linguagem C Prof. José Honorato F. Nunes [email protected] Resumo da aula Considerações Gerais Introdução a Linguagem C Variáveis e C Tipos de
JAVA NETBEANS PGOO Prof. Daniela Pires Conteúdo
Conteúdo Estruturas de repetição (loops, laços)... 2 WHILE (enquanto)... 2 DO... WHILE (faça... enquanto)... 2 FOR... 3 FOREACH... 4 EXERCICIO LOOP FOR... 4 Novo Projeto... 5 Controles SWING... 10 1 Estruturas
Nesta aula serão apresentados alguns comandos de condição, repetição e gráficos.
3 COMANDOS CONDICIONAIS E DE LAÇO Nesta aula serão apresentados alguns comandos de condição, repetição e gráficos. 3.1 COMANDOS CONDICIONAIS 3.1.1 Comando IF Como o próprio nome já indica, estes comandos
2 echo "PHP e outros.";
PHP (Hypertext Preprocessor) Antes de qualquer coisa, precisamos entender o que é o PHP: O PHP(Hypertext Preprocessor) é uma linguagem interpretada gratuita, usada originalmente apenas para o desenvolvimento
Conceitos Importantes:
Conceitos Importantes: Variáveis: Por Flávia Pereira de Carvalho, 2007 i O bom entendimento do conceito de variável é fundamental para elaboração de algoritmos, consequentemente de programas. Uma variável
Algoritmos em Javascript
Algoritmos em Javascript Sumário Algoritmos 1 O que é um programa? 1 Entrada e Saída de Dados 3 Programando 4 O que é necessário para programar 4 em JavaScript? Variáveis 5 Tipos de Variáveis 6 Arrays
Sistemas Operacionais e Introdução à Programação. Programação com linguagem C
Sistemas Operacionais e Introdução à Programação Programação com linguagem C 1 Variáveis na linguagem C: tipo char O tipo char representa um caractere ASCII (ocupa só 1 byte) int main(int argc, char **
Programação Básica em Arduino Aula 2
Programação Básica em Arduino Aula 2 Execução: Laboratório de Automação e Robótica Móvel Variáveis são lugares (posições) na memória principal que servem para armazenar dados. As variáveis são acessadas
Conceitos básicos da linguagem C
Conceitos básicos da linguagem C 2 Em 1969 Ken Thompson cria o Unix. O C nasceu logo depois, na década de 70. Dennis Ritchie, implementou-o pela primeira vez usando o sistema operacional UNIX criado por
UFSM Introdução ao Dev-C++ Profa. Patrícia Pitthan. Introdução ao Dev-C++
Introdução ao Dev-C++ O Dev-C++ oferece um ambiente que integra um editor de textos a um compilador para linguagem C. O compilador usado pelo Dev-C++ é o gcc (Gnu C Compiler). 1) Primeiro programa Para
LÓGICA DE PROGRAMAÇÃO. PROFª. M.Sc. JULIANA H Q BENACCHIO
LÓGICA DE PROGRAMAÇÃO PROFª. M.Sc. JULIANA H Q BENACCHIO Também chamado de estrutura de seleção múltipla (caso). Assim como o if-else, o switch também é uma estrutura de seleção. O if-else realiza o teste
Universidade Federal de Minas Gerais Instituto de Ciências Agrárias
Universidade Federal de Minas Gerais Instituto de Ciências Agrárias Professor: Renato Dourado Maia Disciplina: Programação de Computadores Curso: Engenharia de Alimentos Turma: Terceiro Período 1 Introdução
Capítulo 7 Medidas de dispersão
Capítulo 7 Medidas de dispersão Introdução Para a compreensão deste capítulo, é necessário que você tenha entendido os conceitos apresentados nos capítulos 4 (ponto médio, classes e frequência) e 6 (média).
ALGORITMOS PARTE 01. Fabricio de Sousa Pinto
ALGORITMOS PARTE 01 Fabricio de Sousa Pinto Algoritmos: Definição 2 É uma sequência de instruções finita e ordenada de forma lógica para a resolução de uma determinada tarefa ou problema. Algoritmos 3
3. INTRODUÇÃO À LINGUAGEM C 3.1. CONCEITOS BÁSICOS. Lógica de Programação
Lógica de Programação 3. INTRODUÇÃO À LINGUAGEM C Caro Aluno Vamos iniciar o terceiro capítulo da nossa disciplina. Agora vamos começar a aplicar os conceitos vistos nos capítulos anteriores em uma linguagem
Dadas a base e a altura de um triangulo, determinar sua área.
Disciplina Lógica de Programação Visual Ana Rita Dutra dos Santos Especialista em Novas Tecnologias aplicadas a Educação Mestranda em Informática aplicada a Educação [email protected] Conceitos Preliminares
Introdução à Programação
Introdução à Programação Introdução a Linguagem C Construções Básicas Programa em C #include int main ( ) { Palavras Reservadas } float celsius ; float farenheit ; celsius = 30; farenheit = 9.0/5
Edwar Saliba Júnior. Dicas, Comandos e Exemplos Comparativos entre Linguagem Algorítmica e Linguagem C
Edwar Saliba Júnior Dicas, Comandos e Exemplos Comparativos entre Linguagem Algorítmica e Linguagem C Belo Horizonte 2010 Sumário 1 Nota:... 2 2 Comandos e Palavras Reservadas:... 3 3 Dicas... 4 3.1 Strings
13 Números Reais - Tipo float
13 Números Reais - Tipo float Ronaldo F. Hashimoto e Carlos H. Morimoto Até omomentonoslimitamosaouso do tipo inteiro para variáveis e expressões aritméticas. Vamos introduzir agora o tipo real. Ao final
9.1.2 Laços Controlados por Entrada: Contador
9.1.2 Laços Controlados por Entrada: Contador Exemplo 2- Escreva um algoritmo e um programa em C que dado um Número qualquer, seja calculado e impresso a tabuada desse número. Algoritmo tabuada Variáveis:
Programação de Computadores I Pseudocódigo PROFESSORA CINTIA CAETANO
Programação de Computadores I Pseudocódigo PROFESSORA CINTIA CAETANO Pseudocódigo Pseudocódigo é uma forma genérica de escrever um algoritmo, utilizando uma linguagem simples (nativa a quem o escreve,
Aula 4 Pseudocódigo Tipos de Dados, Expressões e Variáveis
1. TIPOS DE DADOS Todo o trabalho realizado por um computador é baseado na manipulação das informações contidas em sua memória. Estas informações podem ser classificadas em dois tipos: As instruções, que
BC0501 Linguagens de Programação
BC0501 Linguagens de Programação Aula Prática: 03 Assunto: Comandos de Seleção 1. Introdução Um comando de seleção define uma condição em um programa, que permite que grupos de comandos sejam executados
Aula 1. // exemplo1.cpp /* Incluímos a biblioteca C++ padrão de entrada e saída */ #include <iostream>
Aula 1 C é uma linguagem de programação estruturada desenvolvida por Dennis Ritchie nos laboratórios Bell entre 1969 e 1972; Algumas características: É case-sensitive, ou seja, o compilador difere letras
Na disciplina de Cálculo Numérico, vamos trabalhar com a linguagem C++ e o compilador que vamos usar é o Dev C++.
Data: 14/8 Página 1 de 9 Primeiros passos Introdução Na disciplina de Cálculo Numérico, vamos trabalhar com a linguagem C++ e o compilador que vamos usar é o Dev C++. No tutorial anterior, mostramos como
Associação Educacional Dom Bosco Curso de Engenharia 1º ano
Formatação condicional utilizando o valor da célula O que é? Algumas vezes é preciso destacar os valores, ou seja, como colocar em vermelho ou entre parênteses, os negativos, e de outra cor os positivos,
Algoritmos com VisuAlg
Algoritmos com VisuAlg Prof Gerson Volney Lagemann Depto Eng de Produção e Sistemas UDESC - CCT Algoritmos com VisuAlg Introdução A linguagem VisuAlg é simples, seu objetivo é disponibilizar um ambiente
Os objetivos indicados aplicam-se a duas linguagens de programação: C e PHP
AGRUPAMENTO DE ESCOLAS DE SANTA COMBA DÃO CURSO PROFISSIONAL DE TÉCNICO DE GESTÃO E PROGRAMAÇÃO DE SISTEMAS INFORMÁTICOS 2012-2015 PROGRAMAÇÃO E SISTEMAS DE INFORMAÇÃO MÓDULO 2 Mecanismos de Controlo de
ESTRUTURA CONDICIONAL
AULA 6 ESTRUTURA CONDICIONAL 130 Tem como objetivo executar um conjunto de comandos caso uma condição lógica seja atendida. Quando a resposta lógica for falsa, nada será executado. Sintaxe Se CONDIÇÃO
Linguagem algorítmica: Portugol
Programação de Computadores I Aula 03 Linguagem algorítmica: Portugol José Romildo Malaquias Departamento de Computação Universidade Federal de Ouro Preto 2011-1 1/34 Introdução I Lógica A lógica é usada
TÉCNICAS DE PROGRAMAÇÃO
TÉCNICAS DE PROGRAMAÇÃO (Adaptado do texto do prof. Adair Santa Catarina) ALGORITMOS COM QUALIDADE MÁXIMAS DE PROGRAMAÇÃO 1) Algoritmos devem ser feitos para serem lidos por seres humanos: Tenha em mente
Busca. Pesquisa sequencial
Busca Banco de dados existem para que, de tempos em tempos, um usuário possa localizar o dado de um registro, simplesmente digitando sua chave. Uma tabela ou um arquivo é um grupo de elementos, cada um
5 Equacionando os problemas
A UA UL LA Equacionando os problemas Introdução Nossa aula começará com um quebra- cabeça de mesa de bar - para você tentar resolver agora. Observe esta figura feita com palitos de fósforo. Mova de lugar
Estrutura de Dados Básica
Estrutura de Dados Básica Professor: Osvaldo Kotaro Takai. Aula 7: Recursividade O objetivo desta aula é apresentar o conceito de recursão para solução de problemas. A recursão é uma técnica de programação
Componentes da linguagem C++
Componentes da linguagem C++ C++ é uma linguagem de programação orientada a objetos (OO) que oferece suporte às características OO, além de permitir você realizar outras tarefas, similarmente a outras
2. Representação Numérica
2. Representação Numérica 2.1 Introdução A fim se realizarmos de maneira prática qualquer operação com números, nós precisamos representa-los em uma determinada base numérica. O que isso significa? Vamos
Tutorial de Matlab Francesco Franco
Tutorial de Matlab Francesco Franco Matlab é um pacote de software que facilita a inserção de matrizes e vetores, além de facilitar a manipulação deles. A interface segue uma linguagem que é projetada
428 Capítulo 7 Arrays. do { ExibeArrayInts(ar, n); /* Exibe a configuração */ /* corrente do array */ } while (ProximaPermutacao(ar, n));
428 Capítulo 7 Arrays do { ExibeArrayInts(ar, n); / Exibe a configuração / / corrente do array / while (ProximaPermutacao(ar, n)); Análise: Inicialmente, a função GeraPermutacoes() chama a função BubbleSort(),
SUMÁRIO 1. AULA 6 ENDEREÇAMENTO IP:... 2
SUMÁRIO 1. AULA 6 ENDEREÇAMENTO IP:... 2 1.1 Introdução... 2 1.2 Estrutura do IP... 3 1.3 Tipos de IP... 3 1.4 Classes de IP... 4 1.5 Máscara de Sub-Rede... 6 1.6 Atribuindo um IP ao computador... 7 2
(a 1 + a 100 ) + (a 2 + a 99 ) + (a 3 + a 98 ) +... + (a 50 + a 51 ).
Questão 1. A sequência 0, 3, 7, 10, 14, 17, 21,... é formada a partir do número 0 somando-se alternadamente 3 ou 4 ao termo anterior, isto é: o primeiro termo é 0, o segundo é 3 a mais que o primeiro,
Arquitetura de Rede de Computadores
TCP/IP Roteamento Arquitetura de Rede de Prof. Pedro Neto Aracaju Sergipe - 2011 Ementa da Disciplina 4. Roteamento i. Máscara de Rede ii. Sub-Redes iii. Números Binários e Máscara de Sub-Rede iv. O Roteador
Convertendo Algoritmos para a Linguagem C
onvertendo Algoritmos para a Linguagem Notas de Aula Prof. Francisco Rapchan www.geocities.com/chicorapchan O objetivo deste texto é mostrar alguns programas em, dando uma breve descrição de seu funcionamento
JSP - ORIENTADO A OBJETOS
JSP Orientação a Objetos... 2 CLASSE:... 2 MÉTODOS:... 2 Método de Retorno... 2 Método de Execução... 2 Tipos de Dados... 3 Boolean... 3 Float... 3 Integer... 4 String... 4 Array... 4 Primeira:... 4 Segunda:...
UNIVERSIDADE FEDERAL DE SANTA MARIA
1 UNIVERSIDADE FEDERAL DE SANTA MARIA Disciplina de Algoritmos e Programação Profa: Juliana Kaizer Vizzotto Lista de Exercícios Vetores Para a implementação de programas que solucionem os problemas a seguir
A lógica de programação ajuda a facilitar o desenvolvimento dos futuros programas que você desenvolverá.
INTRODUÇÃO A lógica de programação é extremamente necessária para as pessoas que queiram trabalhar na área de programação, seja em qualquer linguagem de programação, como por exemplo: Pascal, Visual Basic,
Programação: Estruturas de seleção
Programação de Computadores I Aula 07 Programação: Estruturas de seleção José Romildo Malaquias Departamento de Computação Universidade Federal de Ouro Preto 2011-1 1/53 Valores booleanos Os valores booleanos
Algoritmos e Programação
Universidade Federal do Vale do São Francisco Curso de Engenharia da Produção / Elétrica Algoritmos e Programação Parte 05 Prof. Jorge Cavalcanti [email protected] www.univasf.edu.br/~jorge.cavalcanti
MC102 Algoritmos e Programação de Computadores 2ª Aula Programa, entrada e saída de dados
MC102 Algoritmos e Programação de Computadores 2ª Aula Programa, entrada e saída de dados 1. Objetivos Falar sobre programa de computador, diferenciando programa em linguagem de máquina, de programa em
