Estruturas de Repetição

Documentos relacionados
Algoritmos e Estruturas de Dados I (DCC/003) Estruturas Condicionais e de Repetição

Algoritmos e Estruturas de Dados I 01/2013. Estruturas Condicionais e de Repetição (parte 2) Pedro O.S. Vaz de Melo

CIT Aula 02 Variáveis e Estruturas de desvio condicional. Autor: Max Rodrigues Marques Carga Horária: 2 h 22/07/15 1

Exercícios Repetição

1ª Lista de Exercícios

Programação científica C++

Algoritmos e Estruturas de Dados I (DCC/003) Estruturas Básicas. Aula Tópico 2

Lógica e Linguagem de Programação Convertendo um algoritmo em pseudocódigo para a linguagem C Professor: Danilo Giacobo

Características da Linguagem C

Algoritmos e Estruturas de Dados I (DCC/003) 2013/1. Estruturas Básicas. Aula Tópico 4

Introdução à Programação

Algoritmos e Lógica de Programação 80 horas // 4 h/semana. Exercício... Para começar... Resolução... Para começar... Para começar...

Estruturas da linguagem C. 1. Identificadores, tipos primitivos, variáveis e constantes, operadores e expressões.

Modulo 4: while do while (limites de variáveis)

3. Linguagem de Programação C

Aula 5 Oficina de Programação Introdução ao C. Profa. Elaine Faria UFU

Linguagem C (repetição)

Programação II. Aula 3

Introdução à Programação. Expressões Booleanas e Comandos Condicionais

Revisão C++ - Parte 1

CAI Fluxograma Revisão 7

Estruturas Condicionais

Sistemas Operacionais e Introdução à Programação. Programação com linguagem C

Universidade Federal de Uberlândia Faculdade de Computação. Linguagem C: estruturas de repetição While / Do While / For

Algoritmos: Conceitos Fundamentais

Comando Switch. Embora a escada if else-if possa executar testes de várias maneiras, ela não é de maneira nenhuma elegante.

LINGUAGEM C: COMANDOS DE REPETIÇÃO

Prof. A. G. Silva. 28 de agosto de Prof. A. G. Silva INE5603 Introdução à POO 28 de agosto de / 1

Variáveis, Tipos de Dados e Operadores

Programação Básica. Estrutura de um algoritmo

Algoritmos e Programação

Controle de Fluxo. Laços e Desvios incondicionais

3. Linguagem de Programação C

Estruturas de repetição

Estruturas de Repetição

A resposta apresentada em aula, no quadro, (em Chapin e/ou Português Estruturado) está correta?

A resposta apresentada em aula, no quadro, (em Chapin e/ou Português Estruturado) está correta?

Estruturas de Decisão

Módulo 5. Instruções if e switch. Algoritmos e Estruturas de Dados I C++ (Rone Ilídio)

Introdução aos Algoritmos

Programação de Computadores I Introdução ao C PROFESSORA CINTIA CAETANO

Linguagem C: Introdução

Algoritmos e Programação

Prof. A. G. Silva. 13 de setembro de Prof. A. G. Silva INE5603 Introdução à POO 13 de setembro de / 21

Curso de C. Declaração de Variáveis 18/3/ :48 1

Algoritmos e Estruturas de Dados I (DCC/003) Introdução à Programação de Computadores. Aula - Tópico 1

Métodos Computacionais. Comandos Condicionais e de Repetição em C

Introdução aos Algoritmos

Fundamentos de Programação1

Algoritmos II prof. Daniel Oliveira

Introdução a Computação

Estruturas de Repetição

Programação: Vetores

Programação Orientada a Objetos II Java Segunda aula. Prof. Rogério Albuquerque de Almeida

Algoritmos. Estrutura de Repetição. para - passo. for. Grupos de Slides No 7. Prof. SIMÃO

UNIVERSIDADE FEDERAL DO RIO GRANDE DO NORTE ESCOLA DE CIÊNCIAS E TECNOLOGIA. ECT1203 Linguagem de Programação Turma Prof.

Linguagem C Controle de Fluxo

Algoritmos e Estruturas de Dados I IEC012. Linguagem C - Estruturas de Controle - Seleção. Prof. César Melo

Algoritmos. Estrutura de Repetição. enquanto. while. Grupos de Slides No 5. Prof. SIMÃO

Terminal. Entrada de dados via teclado. Processamento de dados (cálculos) Tomada de decisão (condição) Saída de dados (via vídeo) Ponto de conexão

Linguagem de Programação C

Aula 4 Introdução ao C

Revisão. Profa Marina Gomes

Estruturas de Decisão. Adaptado de Deise Saccol

Programação Estruturada Prof. Rodrigo Hausen Condicionais e Laços

Aula 6 Oficina de Programação Estruturas Condicionais no C. Profa. Elaine Faria UFU

Arquitetura Von Neumann Dados e instruções são obtidos da mesma forma, simplificando o desenho do microprocessador;

Variáveis primitivas e Controle de fluxo

Introdução à Linguagem C

Programação Computacional C/C++

ESTRUTURA CONDICIONAL E SELEÇÃO

Lógica e Linguagem de Programação Aula 04 - Estruturas de Repetição Repetição com Teste no Início Enquanto - GABARITO Professor: Danilo Giacobo

Introdução ao SciLab. SciLab O que é? Onde obter o programa:

Noções de algoritmos - Aula 1

INF 1005 Programação I

Laços de repetição for, while, do-while

LINGUAGEM C: COMANDOS DE CONTROLE CONDICIONAL

Engenharia Elétrica AAM. Professor: Marco Shawn Meireles Machado

Conceitos básicos. Computação eletrônica: Gurvan Huiban

Legibilidade do código fonte

ESTRUTURAS DE CONTROLE

Disciplina de Introdução à Ciência da Computação ICC 1 - Teoria

Linguagem C. Prof.ª Márcia Jani Cícero

PROGRAMAÇÃO ESTRUTURADA E ORIENTADA A OBJETOS

Capítulo 2 Operadores. A função scanf()

TÉCNICO DE INFORMÁTICA - SISTEMAS

1) Operadores de auto incremento ++ e auto decremento --

Noções de algoritmos - Aula 1

LINGUAGEM C: VARIÁVEIS E EXPRESSÕES

ESTRUTURAS CONDICIONAIS. Introdução à Ciência da ComputaçãoI Simone Senger de Souza

Controle de Fluxo. Laços e Desvios incondicionais

Programação Estruturada

& somadosnumeros = valor

Estruturas de Repetição

Introdução à Programação. Introdução a Linguagem C. Prof. José Honorato F. Nunes

Transcrição:

Algoritmos e Estruturas de Dados I (DCC/003) Estruturas de Repetição Aula Tópico 4 (while, for) 1

Problema 10 Suponha que soma (+) e subtração (-) são as únicas operações disponíveis em C. Dados dois números inteiros positivos A e B, determine o quociente e o resto da divisão de A por B. 2

Algoritmos estruturados Para resolver o problema 10, precisamos de um algoritmo: Sequência finita de instruções que, ao ser executada, chega a uma solução de um problema. Para escrever este algoritmo, podemos usar a seguinte idéia: 1. Representar os números A e B por retângulos de larguras proporcionais aos seus valores; 2. Verificar quantas vezes B cabe em A. A B A = 7, B = 2 Quociente de A/B: n o de vezes que B cabe em A. O que sobra em A é o resto da divisão. 3

Algoritmos estruturados Pode-se escrever este algoritmo como: 1. Sejam A e B os valores dados; 2. Atribuir o valor 0 ao quociente (q); 3. Enquanto B couber em A: { 4. Somar 1 ao valor de q; 5. Subtrair B do valor de A; } 6. Atribuir o valor final de A ao resto (r). 4

Fluxograma É conveniente representar algoritmos por meio de fluxogramas (diagrama de blocos). Em um fluxograma, as operações possíveis são representadas por meio de figuras: Figura Usada para representar Início ou fim. Atribuição. Condição. Leitura de dados. Apresentação de resultados. Conexão entre partes do algoritmo. Fluxo de execução. 5

Fluxograma Exemplo: o algoritmo para o Problema 10 pode ser representado pelo seguinte fluxograma. Início A, B q = 0 Atenção: observe que um algoritmo não inclui detalhes, tais como declaração de variáveis, mensagens a serem exibidas, etc. B <= A Não r = A LEGENDA Sim q = q + 1 A = A - B q, r Fim 6

Programação Estruturada Um algoritmo tem sempre um único bloco início e deve conter, pelo menos, um bloco fim. A execução de um algoritmo deve ser feita seguindo-se as setas. Em geral, a construção de um algoritmo é uma tarefa mais difícil do que codificar o algoritmo em uma linguagem de programação. Porém, a construção de algoritmos pode se beneficiar de técnicas, como a Programação Estruturada. 8

Programação Estruturada Na Programação Estruturada, os programas são construídos usando-se apenas três estruturas: sequência, seleção e repetição. Cada estrutura tem apenas um único ponto de entrada e um único ponto de saída (círculos). Sequência Seleção (duas formas) Repetição (duas formas) V V... F F V F V F 9

Programação Estruturada Atenção! Nestas estruturas, os retângulos são utilizados para indicar qualquer ação, incluindo leitura de dados ou exibição de resultados. Construir programas estruturados corresponde a combinar estas estruturas de duas maneiras: Regra do empilhamento: o ponto de saída de uma estrutura pode ser conectado ao ponto de entrada de outra estrutura. Regra do aninhamento: um retângulo de uma estrutura pode ser substituído por uma outra estrutura qualquer. 10

Programação Estruturada Estas regras podem ser aplicadas quantas vezes forem necessárias e em qualquer ordem. Na construção de fluxogramas, pode-se substituir o primeiro ponto de entrada e os últimos pontos de saída por ovais (início e fim). Os demais pontos de entrada e saída podem ser removidos. 11

Programação Estruturada Exemplo: aplicação da regra de empilhamento. Início Empilhamento Simplificação Fluxograma Fim Exemplo: algoritmo do Problema 10. Início Aninhamento e Simplificação F V F V Fluxograma Fim 12

Problema 11 Dados dois números inteiros A e B, determinar o máximo divisor comum destes dois números. 13

Problema 11 Como calcular o máximo divisor comum entre dois números A e B, representado por mdc(a,b)? Método das divisões sucessivas: efetua-se várias divisões até chegar em uma divisão exata. Suponha que se deseje calcular mdc(48,30). 1. Divide-se o n o maior pelo n o menor: 48/30 = 1 (resto 18). 2. Divide-se o divisor anterior pelo resto anterior e, assim sucessivamente: 30/18 = 1 (resto 12) 18/12 = 1 (resto 6) 12/6 = 2 (resto 0 divisão exata) mdc(48,30) = 6, que corresponde ao divisor da divisão exata. 14

Problema 11 - Algoritmo Um algoritmo para este problema pode ser escrito como: 1. Enquanto B for diferente de zero: { 2. r = resto da divisão de A por B; 3. A = B; 4. B = r; } 5. mdc = A; 15

Problema 11 - Fluxograma O algoritmo para calcular o máximo divisor comum pode ser representado pelo seguinte fluxograma: Início A, B B!= 0 Sim r = A % B A = B B = r Não m = A m Fim 16

Problema 11 - Função MDC Este algoritmo está codificado na função MDC do programa p11.c. 17

Problema 11 - Programa principal O programa principal aparece como um conjunto de instruções do comando do-while: Após exibir o valor do mdc, o programa exibe a mensagem: Continua? (S/N) Espera-se que o usuário digite S ou N, caracteres que serão lidos pela função getche. A função getche retorna o código ASCII do caractere lido. O loop será executado enquanto c for igual a S ou a s. 18

Função toupper Para evitar a comparação com letras maiúsculas e minúsculas, pode-se usar a função toupper: Verifica se o valor de seu parâmetro corresponde ao código ASCII de uma letra minúscula. Caso afirmativo, retorna o código da letra maiúscula correspondente. Caso negativo, retorna o próprio valor do parâmetro. 19

Sinal sonoro Um sinal sonoro ( \a ) pode ser usado para avisar o usuário que a tecla pressionada não é uma resposta válida. Sinal sonoro 20

Problema 12 Escreva um programa que permita ao usuário escolher dentre as seguintes opções: Exibir o conteúdo da pasta; Modificar a hora do sistema; Modificar a data do sistema; Terminar a execução do programa. 21

Problema 12 22

Função system O programa p12.c mostra diversas possibilidades de uso da função system: Parâmetro CLS DIR TIME DATE PAUSE Usado para Limpar a tela de execução. Exibir o conteúdo da pasta em uso. Exibir e permitir modificar a hora atual do sistema. Exibir e permitir modificar a data atual do sistema. Interromper a execução do programa. 23

Função system Os parâmetros possíveis para a função system dependem do sistema operacional sob o qual os programas serão executados. Para o ambiente Dev-C++, os programas são executados sob o sistema operacional DOS. Assim, os parâmetros CLS, DIR, TIME, DATE, PAUSE, correspodem a comandos do sistema DOS. 24

Comandos if-else interrelacionados O programa p12.c apresenta diversos comandos if-else interrelacionados. Exemplo: imagine uma função que recebe como parâmetro um inteiro representando o número de um mês e retorna o número de dias deste mês (considere que fevereiro tem sempre 28 dias). 25

Comandos if-else interrelacionados 26

Comandos if-else interrelacionados Uma outra forma de escrever esta função, mas ainda com comandos if-else interrelacionados é: 27

Comando switch A demanda por comandos if-else interrelacionados é muito comum em programação. Assim, a linguagem C disponibiliza um comando especial para tais situações: switch. A sintaxe deste comando é a seguinte: switch (expressão) { case constante-1: comandos-1; case constante-2: comandos-2;... default: comandos-n; } 28

Comando switch Com o comando switch, a função dias_do_mes pode ser reescrita como: 29

Comando switch Este comando permite que, de acordo com o valor de uma expressão, seja executado um ou mais comandos dentre uma série de alternativas. O caso cuja constante for igual ao valor da expressão será selecionado para execução. Atenção! Os comandos associados a este caso e todos os comandos seguintes serão executados em sequência até o final do comando switch. Para evitar a execução de todos os comandos seguintes, usa-se o comando break. 30

Comando switch Como assim? Para mes = 2: Com o uso de break: dias = 28; Para mes = 2: Sem o uso de break: dias = 28; dias = 30; dias = 0; 31

Comandos break e continue Em alguns programas, durante um processamento iterativo, pode ser necessário: Encerrar o processamento iterativo independentemente do valor da condição do laço; Executar apenas parcialmente uma iteração, ou seja, executar somente algumas das instruções do laço da repetição. Para encerrar um processamento iterativo, independentemente do valor da condição do laço, deve-se usar o comando break. 32

Comandos break e continue Exemplo: dados os valores N (int) e A (float), determine a partir de qual termo o valor de: s 1 1 = 1 + + +... + 2 3 1 N Suponha N = 10 e A = 2. é maior do que A. Instante Valor de s 1 0 termo 1.000000 2 0 termo 1.500000 3 0 termo 1.833333 4 0 termo 2.083333 A partir do quarto termo s > A. 33

Comandos break e continue Um programa para resolver este problema pode ser escrito como: Neste caso, a condição do laço controla apenas o número de termos do somatório. O laço pode ser encerrado quando s > A, usandose o comando break. 34

Comandos break e continue Para executar somente algumas das instruções do laço, mas sem encerrar a repetição: comando continue. Exemplo: ler a idade e o peso de N pessoas e determinar a soma dos pesos das pessoas com mais de 30 anos. O comando continue faz com que a instrução s = s + peso não seja executada quando idade <= 30. Ou seja, ele volta a execução para o início do laço. 35

Comandos break e continue Resultado da execução: Peso total = 35 + 40 + 48 + 60 + 85 = 193 36

Representação de strings Strings são conjuntos de caracteres e cada caractere é codificado como um inteiro de 8 bits (código ASCII). Se imaginarmos que o bit de sinal não é utilizado, cada caractere que compõe uma string pode ser representado por um inteiro no intervalo [0, 255]. Os inteiros de [0, 127] representam os caracteres do código ASCII padrão. Os inteiros de [128, 255] representam os caracteres do código ASCII estendido. 38

Representação de strings Uma string é armazenada em bytes consecutivos de memória. Para identificar o final de uma string, a linguagem C utiliza um caractere especial: \0 (cód. ASCII zero). Exemplo: seja a string Linguagem C. Imagine a representação desta string na memória como: L i n g u a g e m C \0 String Cada quadrado representa uma posição de memória de 8 bits. Posições seguintes não usadas 39

Representação de strings Imagine a declaração da variável texto como: char texto[100]; Se n é uma constante inteira, então os símbolos [n] após o nome da variável indicam que ela poderá ocupar até n posições de memória consecutivas. Logo, a variável texto poderá ocupar até 100 posições do tipo char (ou seja, 100 bytes). Como as posições de memória são consecutivas, cada uma delas pode ser identificada por um índice. 40

Representação de strings Na linguagem C, os valores dos índices começam sempre em zero. Exemplo: considere a seguinte declaração: char S[20] = Linguagem C ; A representação de S pode ser imaginada como: L i n g u a g e m C \0 S[0] S[1] S[2] S[3] S[4] S[5] S[6] S[7] S[8] S[9] S[10] S[11]... S[19] Observe que S pode ocupar até 20 posições (numeradas de 0 a 19). 41

While DoWhile - For int i = 0; while (i<100) { } i = 0; do { printf( %d\n, i); i++; printf( %d\n, i); i++; } while (i < 100); for (int i = 0; i < 100; i++) printf( %d\n, i); for (int i = 100; i > -1; i--) printf( %d\n, i); 47