Baixe o app para aproveitar ainda mais
Prévia do material em texto
Algoritmos e Prática de Programação Prof. Daniel T. Bravo (danieltbravo@uni9.pro.br) NOTAS DE AULA 1 Introdução à Lógica de Programação 2 Introdução à Lógica de Programação • Um computador é uma ferramenta para solucionar problemas que envolvam a manipulação de informações. – Dois tipos básicos: dados e instruções • Um programa de computador é uma sequência de ações (instruções) inseridas na máquina que permite ao computador realizar determinadas tarefas. 3 Introdução à Lógica de Programação • Lógica é a técnica de encadear pensamentos para atingir determinado objetivo. • Seqüência Lógica são passos executados até atingir um objetivo ou solução de um problema. • Instruções são um conjunto de regras ou normas definidas para a realização ou emprego de algo. Em informática, é o que indica a um computador uma ação elementar a executar. 4 Introdução à Lógica de Programação • A Lógica de Programação é a fase de, a partir de um problema, formular soluções que gerem um programa de computador. • Programar é basicamente construir algoritmos. • Programas são algoritmos escritos em uma linguagem de programação (C, Pascal, Java, etc.) e que são interpretados e executados por uma máquina. 5 Algoritmo Sequência lógica e finita de instruções que devem ser seguidas para a resolução de um problema ou a execução de uma tarefa 6 Algoritmo – Exemplo 1 • Algoritmo para retirar a devolução do imposto de renda: INÍCIO 1. Sair de casa 2. Ir ao banco 3. Dirigir-se ao balcão 4. Já chegou a devolução do imposto de renda? 5. Sim: Vá para o passo 11 6. Não: Voltar para casa 7. Esperar um dia 8. É sábado, domingo ou feriado? 9. Sim: Vá para o passo 7 10. Não: Vá para o passo 1 11. Retirar o dinheiro 12. Voltar para casa FIM 7 Algoritmo – Exemplo 2 • Algoritmo para uma receita de bolo: em um bolo, descrevem-se quais serão os ingredientes e suas quantidades. Em seguida, quais são as regras para o seu preparo, como a sequência de inclusão dos ingredientes. INÍCIO 1. Bata cinco claras em neve. 2. Adicione três xícaras de açúcar. 3. Adicione três xícaras de farinha de trigo, cinco gemas, uma colher de fermento e três colheres de chocolate. 4. Bata por cinco minutos. 5. Não: Voltar para casa 6. Unte uma assadeira com margarina e farinha de trigo. 7. Coloque o bolo para assar durante vinte e cinco minutos em temperatura média. FIM 8 Algoritmo – Exemplo 3 • Problema das Torres de Hanói: inicialmente têm-se três hastes (A, B e C) e, na haste A, repousam três anéis de diâmetros diferentes, em ordem decrescente por diâmetro. 9 Algoritmo – Exemplo 3 • O objetivo é transferir os três anéis da haste A para C, usando B se necessário. As regras de movimento são as seguintes: – deve-se mover um único anel por vez; – um anel de diâmetro maior nunca pode repousar sobre algum outro de diâmetro menor. • Animação do algoritmo. 10 24044.mp4 Algoritmo – Exemplo 3 • Algoritmo: INÍCIO 1. Mover um anel da haste A para a haste C. 2. Mover um anel da haste A para a haste B. 3. Mover um anel da haste C para a haste B. 4. Mover um anel da haste A para a haste C. 5. Mover um anel da haste B para a haste A. 6. Mover um anel da haste B para a haste C. 7. Mover um anel da haste A para a haste C. FIM 11 Algoritmo – Exemplo 4 • Problema dos Missionários e Canibais: Três missionários e três canibais precisam atravessar um rio. Para tal, dispõem de um barco com capacidade para duas pessoas. Por medida de segurança, não se deve permitir que em alguma margem a quantidade de missionários seja inferior à de canibais. • Animação do algoritmo. 12 24049.mp4 Algoritmo – Exemplo 4 • Algoritmo: INÍCIO 1. Atravessar um missionário e um canibal para a margem B. 2. Voltar o missionário para a margem A. 3. Atravessar dois canibais para a margem B. 4. Voltar um canibal para a margem A. 5. Atravessar dois missionários para a margem B. 6. Voltar um missionário e um canibal para a margem A. 7. Atravessar dois missionários para a margem B. 8. Voltar um canibal para a margem A. 9. Atravessar dois canibais para a margem B. 10. Voltar um canibal para a margem A. 11. Atravessar dois canibais para a margem B. FIM 13 Algoritmo – Exemplo 5 • Algoritmo para somar e exibir a soma de 2 números inteiros. INÍCIO 1. Informe o primeiro número inteiro. 2. Informe o segundo número inteiro. 3. Some os dois números inteiros. 4. Mostre o resultado da soma. FIM 14 Fases para Montar um Algoritmo • Para montar um algoritmo, é necessário dividir o problema apresentado em três fases fundamentais: – Entrada: dados de entrada – Processamento: procedimentos utilizados para se chegar ao resultado final – Saída: dados processados 15 Entrada Processamento Saída Fases do Algoritmo – Exemplo 5 16 Tipos de Dados 17 Tipos de Dados • Os dados são representados por elementos advindos do mundo externo, os quais representam as informações que os seres humanos manipulam. Eles devem ser abstraídos para serem processados por um computador • São caracterizados por três tipos básicos: – Numéricos (inteiros ou reais) – Caracteres – Lógicos 18 Inteiros • Dados numéricos positivos ou negativos • Exclui qualquer valor numérico fracionário • Exemplo: 35, 234, -56, -9, 0 19 Reais • Dados numéricos positivos, negativo e números fracionários • Exemplo: 35, 234, -56, -9, -45.99, 4.5, 0 20 Caracteres • Seqüência de valores delimitados por aspas • Formadas por: letras, números e símbolos • Também conhecido como: alfanumérico, string, literal, cadeia • Exemplo: “Programação”, “10a”, “10”, “ ” 21 Lógicos • Dados com valores que sugerem uma única opção entre duas possibilidades existentes • Representação: verdadeiro ou falso, 0 (zero) ou 1 (um), sim ou não • Também conhecido como booleano 22 Variáveis e Constantes 23 Variáveis • Variável é tudo aquilo que é sujeito a variações, que é incerto, instável ou inconstante. • Como referenciar a armazenar os dados armazenados em um computador? • Os valores são armazenados na memória • Cada tipo de dado diferente ocupa um número específico de bytes na memória • Para recuperar um valor é necessário saber o seu tipo e o endereço do byte inicial ocupado na memória 24 Variáveis • De formar geral, podemos dizer que uma célula de memória está associada a um identificador • O termo variável é freqüentemente utilizado com sinônimo de identificador • Variável é uma entidade que guarda valores que podem ser alterados no decorrer de um algoritmo • Embora uma variável possa assumir diferentes valores, ela só pode armazenar um valor a cada instante 25 Variáveis • Uma variável não pode armazenar um valor de tipo de dado diferente daquele para o qual foi criada • Uma variável deve possuir um nome e este é utilizado para sua identificação e representação dentro de um programa. 26 Variáveis • Regras de definição e uso de variáveis: – O nome de identificação de uma variável pode utilizar um ou mais caracteres – O primeiro caractere de identificação do nome de uma variável deve sempre ser alfabético (letras maiúsculas ou minúsculas), os demais podem ser alfanuméricos (letras, números e _) – Na definição de um nome composto de uma variável não podem existir espaços em branco entre os nomes – Jamais uma variável pode ser definida com o mesmo nome de uma palavra que represente os comandos de uma linguagem de programação de computadores, ou seja, as palavras reservadas de uma linguagem de programação – Não pode ser utilizado como nome de variável algum que já tenha sido usado para identificar o nome de um programa 27 Papéis de Variáveis em um Programa • Ação: quando seu valor inicial é modificado ao longo da execução de um programa. • Controle: quando seu valor é vigiado e utilizado principalmente em operações lógicas de decisão ao longo de um programa. 28 Constantes • Constante é tudo que é fixo, estável, inalterável, imutável, contínuo, invariável, de valor fixo e que é aplicado sob diversos pontosde vista. • Exemplo: resultado = soma * 1.23 29 Formas de Representação da Lógica de Programação 30 Formas Básicas de Representação da Lógica de Programação • Descrição Narrativa • Diagrama de Blocos (Fluxograma) • Português Estruturado (Pseudocódigo) 31 Descrição Narrativa • Utiliza linguagem natural para especificar os passos para a realização das tarefas. • Como dá margem a interpretações errôneas e ambiguidades, inerentes à sua característica pouco formal, é pouco utilizada para a especificação de algoritmos. 32 Diagrama de Blocos • Descreve o método e a seqüência das ações a serem estabelecidas para um computador • Usa diversos símbolos geométricos • Facilita a visualização completa e imediata da linha de raciocínio lógico de um programador • Os diagramas de blocos podem ser feitos e quebrados e vários níveis • Deve ser indicado de cima para baixo • É incorreto e “proibido” ocorrer o cruzamento de linhas de fluxo de dados entre os símbolos 33 Diagrama de Blocos – Símbolos Básicos 34 Diagrama de Blocos – Símbolos Especiais 35 Diagrama de Blocos - Exemplo 36 Português Estruturado • Linguagem de projeto de programação • Notação para elaboração de algoritmos, os quais serão utilizados na definição, criação e desenvolvimento de documentação genérica do código de um programa de computador • Normalmente não é executada por um computador. 37 Português Estruturado - Exemplo programa Soma var num1, num2, res : inteiro inicio leia num1, num2 res num1 + num2 escreva “Soma: ”, res fim 38 Comandos de Leitura e Escrita de Dados 39 Comando de Atribuição (Processamento de Dados) • Um comando de atribuição permite-nos fornecer um valor a uma variável, em que o tipo deve ser compatível com o tipo da variável. • Sintaxe: identificador expressão • Exemplo: A B X 10 Y C + D + 1 SOMA A1 + A2 + 6 40 Comando de Leitura (Entrada de Dados) • Diagrama de Blocos – Teclado em linha ou entrada manual • Português Estruturado – leia <variável(is)> • Os dados lidos por um algoritmo devem ser armazenados em variáveis. 41 <variável(is)> Comando de Leitura Exemplo • Diagrama de Blocos • Português Estruturado leia raio leia N1, N2, N3 • É possível ler o valor de vários dados em uma única instrução, para isto, basta separar cada identificador de variável por vírgula. 42 N1, N2, N3raio Comando de Escrita (Saída de Dados) • Diagrama de Blocos – Teclado em linha ou entrada manual • Português Estruturado – escreva <variável(is) ou informações> • Os dados de saída de um algoritmo podem vir de variáveis, expressões ou constantes. 43 <variável(is) ou informações> Comando de Escrita Exemplo • Diagrama de Blocos 44 “Ola Mundo” Apresenta a mensagem Ola Mundo na tela res Apresenta o valor da variável res na tela “Soma: ”, s Apresenta a mensagem Soma: e o valor da variável s na tela N1, N2 Apresenta os valores das variáveis N1 e N2 na tela Comando de Escrita Exemplo • Português Estruturado escreva “Ola Mundo” escreva res escreva “Soma: ”, s escreva N1, N2 • É possível escrever o valor de vários dados em uma única instrução, para isto, basta separar cada dado por vírgula. 45 Comando de Leitura e Escrita Exemplo 46 programa Exemplo var v1, res : inteiro inicio leia v1 res v1 * v1 escreva res fim Blocos • Um bloco pode ser definido como um conjunto de ações com uma função definida, neste caso um algoritmo pode ser visto como um bloco. • Para delimitar um bloco, utiliza-se os delimitadores início e fim. 47 Estrutura Sequencial • A estrutura sequencial de um algoritmo corresponde ao fato de que o conjunto de ações primitivas será executado em uma sequência linear de cima para baixo e da esquerda para a direita, isto é, na ordem em que foram escritas. 48 Introdução à Linguagem C 49 Introdução à Linguagem C • A linguagem C foi primeiramente criada por Dennis M. Ritchie e Ken Thompson no laboratório Bell em 1972. – A definição está contida no livro The C Programming Language • C é uma linguagem utilizada como ferramenta na programação de qualquer tipo de sistema – Ex: sistemas operacionais, planilhas eletrônicas, processadores de texto, gerenciadores de banco de dados, processadores gráficos, sistemas de transmissão de dados, para solução de problemas de engenharia ou física, etc. – O sistema operacional UNIX é desenvolvido e C. 50 Introdução à Linguagem C • A linguagem C foi desenhada para que o usuário possa planejar programas estruturados e modulares. – O resultado é um programa mais legível e documentado. – Os programas em C tendem a ser bastante compactos e de execução rápida. • Programas em C podem ser desenvolvidos em partes separadas por pessoas distintas e depois unidos num produto final, o que significa que bibliotecas de funções podem ser criadas ou usadas sem realmente conhecer o código de cada uma delas. 51 Conceito de Compiladores • Todo programa escrito numa linguagem de programação de alto nível precisa ser traduzido para a linguagem de máquina, para que o computador possa executá-lo, para isso existem os interpretadores e os compiladores. • Interpretador: faz a análise sintática (verifica se o programa fonte está escrito de acordo com a gramática definida pela linguagem) e a análise semântica (verifica, por exemplo, uma multiplicação entre tipos de dados diferentes). Executa o programa passo a passo. • Compilador: Tal como o interpretador, faz a análise sintática e semântica do programa fonte. O compilador lê o arquivo contendo o programa escrito em uma dada linguagem de programação e gera um programa em linguagem de máquina que seja equivalente ao programa inicial de tal forma que o computador o entenda. 52 Compilador vs Interpretador 53 Interpretador Programa Fonte Interpretador Dados Saída Compilador Programa Fonte Compilador Programa ObjetoDados Saída Criação de um Programa em Linguagem C • A criação de um programa em linguagem C segue basicamente três passo: – Criação do programa fonte (texto) – Compilação desse programa, para a sua tradução em código executável – Execução do código produzido 54 Estrutura Básica de um Programa em C • Um programa em C consiste em uma ou várias “funções”. • Forma geral da função main: • Os parênteses após o nome indicam que esta é uma função. – A função “main” é utilizada para indicar a função que inicia o programa. • Toda função C deve ser iniciada por uma chave de abertura, {, e encerrada por uma chave de fechamento, } • A função main() deve existir em algum lugar do seu programa e marca o ponto de início da execução do programa. – Se um programa for constituído de uma única função esta será main() 55 main () { // instruções } O Pré-Processador C • O pré-processador C é um programa que examina o programa-fonte em C e executa certas modificações nele, baseado em instruções chamadas diretivas. • O pré-processador faz parte do compilador e pode ser considerado uma linguagem dentro da linguagem C. Ele é executado automaticamente antes da compilação. Diretivas do pré-processador seriam instruções desta linguagem. • Instruções para o pré-processador devem fazer parte do texto que criamos, mas não farão parte do programa que compilamos, pois são retiradas do texto pelo compilador antes da compilação. 56 O Pré-Processador C • Todas a diretivas do pré-processador são iniciadas com o símbolo (#). As diretivas podem ser colocadas em qualquer parte do programa, mas é costume serem colocadas no início do programa, antes de main(), ou antes do começo de uma função particular. • Não há ponto-e-vírgula após qualquer diretiva do pré- processador. 57 A Diretiva #include • A diretiva #include causa a inclusão de um programa-fonte em outro. Ela diz ao compilador para incluir, na hora da compilação, um arquivo especificado. Sua forma geral é: #include “nome_do_arquivo” ou #include <nome_do_arquivo> • A diferença entre usar “ ” e < > é somente a ordem de procura nosdiretórios pelo arquivo especificado. Se o arquivo estiver nos caminhos de procura pré-especificados do compilador (como é o caso do arquivo stdio.h) use < >. 58 Variáveis • As variáveis são o aspecto fundamental de qualquer linguagem de computador. Uma variável em C é um espaço de memória reservado para armazenar um certo tipo de dado e tendo um nome para referenciar o seu conteúdo. • Uma variável é um espaço de memória que pode conter, a cada tempo, valores diferentes. 59 Declaração de Variáveis • Uma declaração de variável é uma instrução para reservar uma quantidade de memória apropriada para armazenar o tipo especificado. • Uma declaração de variável consiste no nome de um tipo, seguido do nome da variável. • Exemplo: int num; • Em C todas as variáveis devem ser declaradas. • Se você tiver mais de uma variável do mesmo tipo, poderá declará-las de uma única vez, separando seus nomes por vírgulas. • Exemplo: int aviao, foguete, helicoptero; 60 Nomes de Variáveis • A escolha de nomes significativos para suas variáveis pode ajudá-lo a entender o que o programa faz e prevenir erros. • Pode-se usar quantos caracteres quiser para o nome de uma variável • O primeiro caractere deve ser obrigatoriamente uma letra ou o caractere de sublinhar (_). • Os demais caracteres podem ser letras, números ou caracteres de sublinhar. • Uma variável não pode ter o mesmo nome de uma palavra- chave de C. • Em C letras minúsculas e maiúsculas são diferentes – Exemplo: PESO, Peso, peSo, peso 61 Palavras-Chaves em C auto double int struct break else long switch case enum register typedef char extern return union const float short unsigned continue for signed void default goto sizeof volatile do if static while 62 Tipos de Dados • O tipo de uma variável informa a quantidade de memória, em bytes, que esta irá ocupar e a forma como o seu conteúdo será armazenado. 63 TIPO BIT BYTES ESCALA char 8 1 -128 a 127 int 16 2 -32768 a 32767 float 32 4 3.4E-38 a 3.4E+38 double 64 8 1.7E-308 a 1.7E+308 void 0 0 sem valor Modificadores de Tipos • Com exceção de void, os tipos de dados básicos podem estar acompanhados por modificadores na declaração de variáveis. Os modificadores de tipos oferecidos por C são: – long ou long int (4 bytes) – unsigned char (de 0 a 255) – unsigned int (de 0 a 65535) – unsigned long – short (2 bytes no IBM-PC) 64 Inicializando Variáveis • É possível combinar uma declaração de variável com o operador de atribuição para que a variável tenha um valor ao mesmo tempo de sua declaração; é o que chamaremos de inicialização de variáveis. int evento = 5; char corrida = ‘C’; float tempo = 27.25; 65 Atribuições Múltiplas • C permite que você atribua o mesmo valor a muitas variáveis usando atribuições múltiplas em um único comando. x = y = z = 10; 66 Função de Saída de Dados • A função printf() é uma das funções de E/S (entrada e saída) que podem ser usada em C. Ela não faz parte da definição de C mas todos os sistemas têm uma versão de printf() implementada. • Esta função é utilizada para imprimir dados na tela do computador. Os dados a serem impressos devem ser passados como argumentos da função printf(). • Sintaxe: printf (“expr. de controle”, lista de argumentos); 67 Função de Saída de Dados • Exemplo: #include <stdio.h> #include <stdlib.h> main () { printf (“Este e’ o numero dois: %d”, 2); system (“PAUSE”); } • A expressão de controle pode conter caracteres que serão exibidos na tela e códigos de formatação que indicam o formato em que os argumentos devem ser impressos. No exemplo acima, o código de formatação %d solicita a função printf() imprimir o segundo argumento em formato decimal. • printf() é uma função da biblioteca padrão do C (stdio.h). Para utilizar a função printf() a biblioteca stdio.h deve ser incluída com a diretiva #include. 68 Função de Saída de Dados • Exemplo 2: #include <stdio.h> #include <stdlib.h> main () { printf (“Ola Mundo! \n”); system (“PAUSE”); } • Neste exemplo a expressão de controle contém apenas os caracteres que devem ser impressos na tela e um caractere especial de impressão (“\n”) que indica ao programa para colocar o cursor na próxima linha. • Quando não temos nenhum código de formatação na expressão de controle, não deve ser passado nenhum outro argumento para a função printf(). 69 Função de Saída de Dados • Exemplo 3: #include <stdio.h> #include <stdlib.h> main () { int numInt = 10; float numReal = 15.25; printf (“%d %f”, numInt, numReal); system (“PAUSE”); } 70 Formatos de Impressão • A tabela abaixo apresenta os códigos para impressão formatada da função printf(): Código printf() Formato %c Caractere Simples %d Decimal %e Notação Científica %f Ponto Flutuante (float) %g %e ou %f (o mais curto) %o Octal %s Cadeia de Caracteres %u Decimal sem sinal %x Hexadecimal %ld Decimal Longo %lf Ponto Flutuante Longo (double) %% Um único sinal de porcentagem 71 Caracteres Especiais de Impressão • A tabela abaixo apresenta os códigos de C para caracteres que não podem ser inseridos diretamente pelo teclado. Códigos Especiais Significado \n Nova linha \r Retorno do cursor \t Tab \b Retrocesso \” Aspas \\ Barra \f Salta página de formulário \0 Nulo 72 Modificadores de Formato • O Especificador de Largura Mínima de Campo – Um número colocado entre o símbolo % e o código de formato age como um especificador de largura mínima de campo. Isso preenche a saída com espaços, para assegurar que ela atinja um certo comprimento mínimo. – Para preencher com 0s, deve-se colocar um 0 antes do especificador de largura mínima de campo. Por exemplo, %05d preencherá um número de menos de cinco dígitos com 0s de forma que seu comprimento total seja cinco. 73 Modificadores de Formato • O Especificador de Precisão – O especificador de precisão segue o especificador de largura mínima de um campo (se houver algum), consistindo em um ponto seguido de um número inteiro. O seu significado exato depende do tipo de dado a que está sendo aplicado. – Exemplo: #include <stdio.h> main () { printf (“%.4f\n”, 123.1234567); printf (“%6.4d\n”, 21); printf (“%6.0d\n”, 21); printf (“%.15s\n”, “Este e um teste simples”); } Saída: 123.1235 0021 21 Este e um teste 74 Função de Entrada de Dados • A função scanf() é outra das funções de E/S implementada em todos os compiladores C. Ela é o complemento de printf() e nos permite ler dados formatados da entrada padrão (teclado). • Sua sintaxe é similar à de printf(), isto é, uma expressão de controle seguida por uma lista de argumentos separados por vírgula. • A principal diferença está na lista de argumentos. Os argumentos de scanf() devem ser endereços de variáveis. • Sintaxe: scanf (“expr. de controle”, lista de argumentos); 75 Função de Entrada de Dados • A expressão de controle pode conter códigos de formatação, precedidos por um sinal %. • A lista de argumentos deve consistir nos endereços das variáveis. C oferece um operador para tipos básicos chamado operador de endereço e referenciado pelo símbolo & que resulta o endereço do operando. • scanf() é uma função da biblioteca padrão do C (stdio.h). Para utilizar a função scanf() a biblioteca stdio.h deve ser incluída com a diretiva #include. 76 Função de Entrada de Dados • Exemplo: #include <stdio.h> #include <stdlib.h> main () { float anos, dias; printf (“Digite sua idade em anos: ”); scanf (“%f”, &anos); dias = anos * 365; printf (“Sua idade em dias e’ %.0f.\n”, dias); system (“PAUSE”); } 77 O Operador de Endereço (&) • Toda variável ocupa uma certa localização na memória, e seu endereço é o do primeiro byte ocupado por ela. Um inteiro ocupa 2 bytes. Se você declarou uma variável n como inteira e atribui a ela o valor 2, quando n for referenciada devolverá 2. Entretanto, se você referenciar n precedido de & (&n) devolverá o endereço do primeiro byte onde n está guardada. • Exemplo: #include <stdio.h> #include <stdlib.h> main () { int num =2; printf (“Valor=%d, endereco=%u”, num, &num); system (“PAUSE”); } Saída: Valor=2, endereco=1370 • Um endereço de memória é visto como um número inteiro sem sinal, por isso usamos %u. 78 Códigos de Formatação de scanf() • A tabela abaixo apresenta os códigos de formatação da função scanf(): Código Função %c Leia um único caractere %d Leia um inteiro decimal %e Leia um número em notação científica %f Leia um número em ponto flutuante %o Leia um inteiro octal %s Leia uma série de caracteres %u Leia um decimal sem sinal %x Leia um número hexadecimal %l Leia um inteiro longo %lf Leia um double 79 Exemplo • Programa que calcula e apresenta na tela a soma de dois números inteiros. #include <stdio.h> #include <stdlib.h> main () { int num1, num2; printf (“Digite o primeiro valor:”); scanf (“%d”, &num1); printf (“Digite o segundo valor:”); scanf (“%d”, &num2); int soma = num1 + num2; printf (“Soma: %d”, soma); system (“PAUSE”); } 80 Exemplo 2 • Programa que calcula e apresenta na tela a área de um círculo. #include <stdio.h> #include <stdlib.h> main () { float raio; printf (“Digite o valor do raio:”); scanf (“%f”, &raio); float area = 3.1415 * raio * raio; printf (“Area: %.2f”, area); system (“PAUSE”); } 81 Constantes • O qualificador const pode ser aplicado à declaração de qualquer variável para especificar que seu valor não deve ser mudado. const float PI = 3.1415; const float SALARIO_MINIMO = 350.00; 82 A Diretiva #define • A diretiva #define pode ser usada para definir constantes simbólicas com nomes apropriados • Exemplo: #define PI 3.1415 • Quando o compilador encontra #define, ele substitui cada ocorrência de PI por 3.1415 • A frase à esquerda (PI), que será procurada, é chamada “identificador”. A frase à direita (3.1415), que será substituída, é chamada “texto”. Um ou mais espaços separam o identificador do texto. • Por convenção, o identificador é escrito em letras maiúsculas. • Só é permitido escrever um comando destas por linha. 83 Exemplo • Programa que calcula a área de um círculo. #include <stdio.h> #include <stdlib.h> #define PI 3.1415 main () { float raio; printf (“Digite o valor do raio:”); scanf (“%f”, &raio); float area = PI * raio * raio; printf (“Area: %.2f”, area); system (“PAUSE”); } 84 Comentários • Comentários podem ser colocados em qualquer lugar de seu programa. • Comentários começam com dois caracteres, chamados símbolos de comentários, barra-asterisco (/*) e terminam por asterisco-barra (*/). Como C ignora espaços, os comentários podem ser escritos em vários linhas. /* Aqui esta um exemplo de comentario em multiplas linhas */ • Não são permitidos os simbolos de /* ou */ no interior de um comentário. /* estou escrevendo /* um comentario ilegal */ 85 Operadores Aritméticos 86 Operadores Aritméticos • Duas categorias: unários e binários • São unários quando atuam na inversão do estado de um valor numérico • São binários quando utilizados em operações matemáticas de divisão, multiplicação, adição e subtração • Em uma expressão aritmética, caso necessite alterar o nível de prioridade de um referido cálculo, ele deve ser definido por meio de parênteses. 87 Operadores Aritméticos Operador Operação Categoria Resultado Prioridade Atribuição - - - + Manutenção de sinal Unário - 1 - Inversão de sinal Unário - 1 ↑ Exponenciação Binário Inteiro ou Real 2 ↑(1/n) Radiciação de n Binário Real 2 / Divisão Binário Real 3 * Multiplicação Binário Inteiro ou Real 3 div Divisão Binário Inteiro 3 mod Módulo (Resto da divisão) Binário Inteiro 3 + Adição Binário Inteiro ou Real 4 - Subtração Binário Inteiro ou Real 4 88 Expressões Aritméticas • São definidas pelo relacionamento existente entre variáveis e constantes numéricas com a utilização dos operadores aritméticos • Exemplo resultado 10 * (3 + v1) 89 Transformando Expressões Matemáticas em Computacionais • As expressões aritméticas em computação são escritas de uma forma um pouco diferente da forma conhecida em matemática: – Expressão matemática: X = {43 . [55 : (30 + 2) ] } – Expressão Computacional: X (43 * (55 / (30 + 2) ) ) 90 Transformando Expressões Matemáticas em Computacionais • Na forma computacional, as chaves e colchetes são abolidos, utilizando-se em seu lugar apenas parênteses • É também substituído o sinal de (=) igual pelo sinal de () implicado ou atribuído • O sinal implicado ou atribuído () é utilizado para indicar que o valor de uma expressão aritmética está sendo armazenado em uma variável 91 Transformando Expressões Matemáticas em Computacionais • Exemplo: fórmula para calcular a área de um triângulo – Expressão matemática: – Expressão computacional: A (b * h) / 2 92 2 h . b A = Operadores Relacionais 93 Operadores Relacionais • Uma condição é o estabelecimento de uma relação lógica entre dois elementos • Variável x Variável, Variável x Constante • Para definir uma relação lógica é necessário usar operadores relacionais • Uma relação lógica retorna somente os valores verdadeiro ou falso • Os operadores relacionais possuem o mesmo nível de prioridade 94 Operadores Relacionais Símbolo Significado = Igual a > Maior que < Menor que >= Maior ou igual a <= Menor ou igual a <> Diferente de 95 Operadores Lógicos 96 Operadores Lógicos • Utilizados para uma mesma tomada de decisão que necessite de mais de uma condição • Também conhecidos como operadores booleanos 97 Símbolo Significado e Conjunção ou Disjunção não Negação Operador Lógico E • Utilizado quando duas ou mais condições necessitam ser verdadeiras para obter-se um resultado lógico verdadeiro. Caso contrário, o resultado do valor lógico será falso. 98 Condição 1 Condição 2 Resultado Verdadeira Verdadeira Verdadeiro Verdadeira Falsa Falso Falsa Verdadeira Falso Falsa Falsa Falso Operador Lógico Ou • Utilizado quando pelo menos uma de duas ou mais condições necessita ser verdadeira para obter-se um resultado lógico verdadeiro. Caso contrário o valor lógico será falso 99 Condição 1 Condição 2 Resultado Verdadeira Verdadeira Verdadeiro Verdadeira Falsa Verdadeiro Falsa Verdadeira Verdadeiro Falsa Falsa Falsa Operador Lógico Não • Inverte o valor lógico de uma determinada condição 100 Condição Resultado Verdadeira Falso Falsa Verdadeira Operadores Lógicos - Prioridade • Os operadores lógicos possibilitam o uso de mais de uma condição para a tomada de uma única decisão • É necessário levar em conta a ordem de prioridade dos operadores lógicos • Caso necessite alterar o nível de prioridade de uma expressão deve ser utilizado parênteses 101 Operador Operação Prioridade não Negação 1 e Conjunção 2 ou Disjunção 3 Operadores Linguagem C 102 Operadores Aritméticos Linguagem C • C oferece 6 operadores aritméticos binários (operam sobre dois operandos) e um operador aritmético unário (opera sobre um operando). • Binários = Atribuição + Soma - Subtração * Multiplicação / Divisão % Módulo (Resto da divisão inteira) • Unário - Menos unário (Indica a troca de sinal) • Precedência (mais alta -> mais baixa) - (menos unário), * / %, + - Para alterar a ordem de precedência, utilize parênteses. 103 Operadores de Incremento (++) e Decremento (--) • Considere os operadores abaixo que não são comuns em outras linguagens: ++ incrementa de 1 seu operando -- decrementa de 1 seu operando • O operador de incremento (++) incrementa de um seu operando. Este operador trabalha de dois modos: – O primeiro modo é chamado pré-fixado e o operador aparece antes do nome da variável. – O segundo é o modo pós-fixado em que o operador aparece seguindo o nome da variável. • Em ambos os casos, a variável é incrementada. Porém quando ++n é usado numa instrução, n é incrementada antes de seu valor ser usado, e quando n++ estiver numa instrução, n é incrementada depois de seu valor ser usado. • Os operadores de incremento e decremento tem precedência sobretodos os operadores aritméticos. 104 Operadores de Incremento (++) e Decremento (--) • Exemplo 1: Se as seguintes linhas de programa forem executadas: n = 5; x = n++; printf (“x = %d n = %d”, x, n); a saída será: x = 5 n = 6 • Exemplo 2: Se as seguintes linhas de programa forem executadas: n = 5; x = ++n; printf (“x = %d n = %d”, x, n); a saída será: x = 6 n = 6 105 Operadores Aritméticos de Atribuição • Operadores Aritméticos de Atribuição +=, -=, *=, /=, %= • Cada um destes operadores é usado com um nome de variável à sua esquerda e uma expressão à sua direita. A operação consiste em atribuir um novo valor à variável que dependerá do operador e da expressão à direita. • Se x é uma variável, exp uma expressão e op um operador aritmético (+, -, *, / ou %), então x op= exp; equivale a x = (x) op (exp); • Exemplos: i += 2; equivale a i = i + 2; x *= y + 1; equivale a x = x * (y + 1) t /= 2.5; equivale a t = t / 2.5; p %= 5; equivale a p = p % 5; d -= 3; equivale a d = d – 3; 106 Operadores Relacionais Linguagem C • Os operadores aritméticos têm maior precedência que os operadores relacionais. 107 Símbolo Significado == Igual a > Maior que < Menor que >= Maior ou igual a <= Menor ou igual a != Diferente de Operadores Lógicos Linguagem C 108 Operador Significado Precedência ! Negação – Não Lógico 1 && Conjunção – E Lógico 2 || Disjunção – OU Lógico 3 Precedência dos Operadores Linguagem C 109 Operadores Tipos ! - ++ -- unários; não lógico e menos aritmético * / % aritméticos + - aritméticos < > <= >= relacionais == != relacionais && lógico E || lógico OU = += -= *= /= %= aritméticos de atribuição Desvio Condicional Simples 110 Desvio Condicional Simples • Recurso para tomada de decisão simples • Deve ser utilizado caso seja necessário executar instruções somente se uma condição for verdadeira • A tomada de decisão simples utiliza a instrução se...então...fim_se. Nesta instrução, se a condição estabelecida for verdadeira, são executadas todas as instruções definidas entre se...então e fim_se, depois são executadas todas as condições existentes após fim_se. Se a condição estabelecida for falsa, são executadas as instruções que estão definidas após a instrução fim_se 111 Desvio Condicional Simples 112 Diagrama de Blocos Português Estruturado se condição então instruções fimse Linguagem C if (condição){ instruções; } Desvio Condicional Simples Exemplo • Ler dois valores numéricos, efetuar a adição e apresentar o seu resultado caso o valor somando seja maior que 10. • Diagrama de Blocos: 113 Início A, B X A + B X > 10 N Fim X S Desvio Condicional Simples Exemplo • Português Estruturado: programa SOMA_NUMEROS var A, B, X : inteiro inicio escreva “Digite dois numeros inteiros” leia A, B X A + B se X > 10 então escreva X fimse fim 114 Desvio Condicional Simples Exemplo • Linguagem C: #include <stdio.h> #include <stdlib.h> main () { int a, b, x; printf (“Digite dois numeros inteiros \n“); scanf (“%d%d”, &a, &b); x = a + b; if (x > 10) { printf (“Soma: %d \n”, x); } system (“PAUSE”); } 115 Desvio Condicional Composto 116 Desvio Condicional Composto • se...então...senão...fimse • Deve ser utilizado caso seja necessário executar instruções se uma condição for verdadeira ou executar outras instruções se a condição for falsa • Nesta instrução, se a condição estabelecida for verdadeira, são executadas todas as instruções definidas entre se...então e senão. Se a condição estabelecida for falsa, são executadas todas as instruções que estiverem definidas entre senão e fimse • Somente após a execução de uma das possibilidades anteriores é que o programa executa as instruções existentes após o fimse 117 Desvio Condicional Composto 118 Condição N S Instruções executadas quando a condição for verdadeira Instruções executadas quando a condição for falsa Diagrama de Blocos Português Estruturado se condição então instruções para cond. verdadeira senão instruções para cond. falsa fimse Linguagem C if (condição){ instruções; } else { instruções; } Desvio Condicional Composto Exemplo • Ler dois valores numéricos e efetuar a adição. Caso o valor somando seja maior ou igual a 10, deve ser apresentado somando a ele 5; caso o valor somado não seja maior ou igual a 10, deve ser apresentado subtraído dele 7. • Diagrama de Blocos: 119 Início A, B X A + B X >= 10 N Fim S R X - 7 R X + 5 R Desvio Condicional Composto Exemplo • Português Estruturado: programa SOMA_NUMEROS var A, B, X, R : inteiro inicio escreva “Digite dois numeros inteiros” leia A, B X A + B se X >= 10 então R X + 5 senão R X – 7 fimse escreva R fim 120 Desvio Condicional Composto Exemplo • Linguagem C: #include <stdio.h> #include <stdlib.h> main () { int a, b, x, r; printf (“Digite dois numeros inteiros \n”); scanf (“%d%d”, &a, &b); x = a + b; if (x >= 10) { r = x + 5; } else { r = x – 7; } printf (“Resultado: %d \n”, r); system (“PAUSE”); } 121 Desvio Condicional Encadeado 122 Desvio Condicional Encadeado (Aninhado) • Utilizado quando é necessário estabelecer algumas verificações lógicas de condições definidas sucessivamente 123 Desvio Condicional Encadeado Diagrama de Blocos 124 Condição 1 Condição 2 Instruções executadas quando a condição 1 é verdadeira Instruções executadas quando a condição 1 é false, mas a condição 2 é verdadeira Instruções executadas quando a condição 1 e a condição 2 são falsas N S N S Desvio Condicional Encadeado Português Estruturado se condição1 então instruções para condição1 verdadeira senão se condição2 então instruções para condição2 verdadeira, porém condição1 falsa senão instruções para condição1 e condição2 falsa fimse fimse 125 Desvio Condicional Encadeado Linguagem C if (condicao1) { instruções; } else { if (condicao2) { instruções; } else { instruções; } } 126 Desvio Condicional Encadeado Exemplo • Elaborar um algoritmo que efetue o cálculo do reajuste de salário de um funcionário. Considere que o funcionário deve receber um reajuste de 15% caso seu salário seja menor que 500. Se o salário for maior ou igual a 500, mas menor ou igual a 1000, seu reajuste será de 10%; caso seja ainda maior que 1000, o reajuste deverá ser de 5%. 127 Desvio Condicional Encadeado Exemplo • Diagrama de Blocos: 128 salario < 500 salario <= 1000 novoSalario salario * 1.15 novoSalario salario * 1.10 novoSalario salario * 1.05 N S N S Início salario novoSalario Início Desvio Condicional Encadeado Exemplo • Português Estruturado: programa ReajustaSalario var salario : real novoSalario : real inicio escreva “Salario: ” leia salario se salario < 500 então novoSalario salario * 1.15 senão se salario <= 1000 então novoSalario salario * 1.10 senão novoSalario salario * 1.05 fimse fimse escreva novoSalario fim 129 Desvio Condicional Encadeado Exemplo • Linguagem C: #include <stdio.h> #include <stdlib.h> main () { float salario, novoSalario; printf (“Salario: ”); scanf (“%f”, &salario); if (salario < 500) { novoSalario = salario * 1.15; } else { if (salario <= 1000) { novoSalario = salario * 1.10; } else { novoSalario = salario * 1.05; } } printf (“Novo Salario: %.2f \n”, novoSalario); system (“PAUSE”); } 130 Desvio Condicional Encadeado O Comando else-if • A construção else-if é uma maneira reformatada de nihos if-else: #include <stdio.h> #include <stdlib.h> main () { float salario, novoSalario; printf (“Salario: ”); scanf (“%f”, &salario); if (salario < 500) novoSalario = salario * 1.15; else if (salario <= 1000) novoSalario = salario * 1.10; else novoSalario = salario * 1.05; printf (“Novo Salario: %.2f \n”, novoSalario); system (“PAUSE”); } 131 comando else-if Esse else está associado ao comando if (salario <= 1000) Desvio Condicional com Múltipla Escolha132 Desvio Condicional com Múltipla Escolha • Deve ser utilizado quando houver a necessidade de construir um programa no qual seja necessário utilizar uma seqüência grande de instruções do tipo se 133 Desvio Condicional com Múltipla Escolha Diagrama de Blocos 134 VAR=VLR1 VAR=VLR2 VAR=VLRN Instruções Instruções Instruções Instruções S S S N N N Desvio Condicional com Múltipla Escolha Português Estruturado escolha variável caso valor1: instruções caso valor2: instruções ... caso contrário: instruções fimescolha 135 Desvio Condicional com Múltipla Escolha Linguagem C switch (expressao) { case constante1: instruções; /*opcional*/ case constante2: /*opcional*/ instruções; /*opcional*/ .... default: /*opcional*/ instruções; /*opcional*/ } 136 O Comando switch • O comando switch avalia a expressão entre parênteses, após a palavra switch, e compara seu valor com os rótulos dos casos. • A expressão entre parênteses deve ser de valor inteiro ou caractere. • Cada caso deve ser rotulado por uma constante do tipo inteiro ou caractere ou por uma expressão constante. Você não poderá usar uma variável e nem uma expressão lógica para rótulo. Esta constante deve ser terminada por dois pontos (:) e não por ponto-e-vírgula. • Pode haver uma ou mais instruções seguindo cada case. Estas instruções não necessitam estar entre chaves. 137 O Comando switch • O corpo de um switch deve estar envolto por chaves. • Se um caso for igual ao valor da expressão, a execução começa nele. • Se nenhum caso for satisfeito e existir um caso default: a execução começará nele, senão o programa processará as instruções seguintes ao bloco switch. Um default: é opcional. • Os rótulos dos casos devem ser todos diferentes. • O comando break causa uma saída imediata do switch. Se não existir um comando break seguindo as instruções de um caso, o programa segue executando todas as instruções dos casos abaixo. 138 Desvio Condicional com Múltipla Escolha Exemplo • Ler um número inteiro. Caso o número lido seja 9, apresentar na tela O numero e igual a 9. Caso o número lido seja 10, apresentar na tela O numero e igual a 10. Caso o número lido seja igual a 11, apresentar na tela O numero e igual a 11. Caso contrário, apresentar na tela O numero esta errado. 139 Desvio Condicional com Múltipla Escolha Exemplo • Diagrama de Blocos: 140 num = 9 num = 10 num = 11 S S S N N Inicio num “O numero esta errado” N Fim “O numero e igual a 9” “O numero e igual a 10” “O numero e igual a 11” Desvio Condicional com Múltipla Escolha Exemplo • Português Estruturado: programa NUMEROS var num : inteiro inicio escreva “Digite um numero:” leia num escolha num caso 9: escreva “O numero e igual a 9” caso 10: escreva “O numero e igual a 10” caso 11: escreva “O numero e igual a 11” caso contrário: escreva “O numero esta errado” fimescolha fim 141 Desvio Condicional com Múltipla Escolha Exemplo • Linguagem C: #include <stdio.h> #include <stdlib.h> main () { int num; printf (“Digite um numero: ”); scanf (“%d”, &num); switch (num) { case 9: printf (“O numero e igual a 9”); break; case 10: printf (“O numero e igual a 10”); break; case 11: printf (“O numero e igual a 11”); break; default: printf (“O numero esta errado”); } system (“PAUSE”); } 142 Estrutura de Repetição Enquanto 143 Estruturas de Repetição • São necessárias quando se tem que repetir um determinado conjunto de instruções, que representem um comportamento padrão, várias vezes • Com estas estruturas, escreve-se as instruções uma única vez, e ela pode ser executada várias vezes • Repetições podem ser controladas por: – Condição – Contador • Quando o controle é por contador, a interrupção é prevista no instante em que é iniciada a execução da estrutura de repetição • Quando o controle é por condição, deve haver uma expressão lógica, e a interrupção é controlada por meio do resultado desta expressão – É imprescindível que haja uma instrução dentro do bloco de instruções que permita a alteração do valor lógico da condição • As estruturas de repetição são também conhecidas como laços 144 Estrutura de Repetição Enquanto • É uma estrutura que faz um teste lógico no início de um laço, verificando se é permitido executar o trecho de instruções subordinado a esse laço • Esta estrutura tem o seu funcionamento controlado por decisão, isto é, uma condição • Executa um determinado conjunto de instruções enquanto a condição verificada for verdadeira • No momento em que a condição se torna falsa, o processamento é desviado para fora do laço • Se a condição for falsa logo de início, as instruções contidas no laço são ignoradas 145 Estrutura de Repetição Enquanto 146 Diagrama de Blocos Português Estruturado enquanto (condição) faça instruções fimenquanto Linguagem C while (condição){ instruções; } Estrutura de Repetição Enquanto Exemplo 1 • Elaborar um algoritmo que calcule a média aritmética de 3 notas de 30 alunos • Diagrama de Blocos: 147 Estrutura de Repetição Enquanto Exemplo 1 • Português Estruturado: programa media var cont : inteiro n1, n2, n3, m : real inicio cont 1 enquanto (CONT <= 30) faça escreva “Digite 3 notas” leia n1, n2, n3 m (n1 + n2 + n3) / 3 escreva “Media: ”, m cont cont + 1 fimenquanto fim 148 Estrutura de Repetição Enquanto Exemplo 1 • Linguagem C: #include <stdio.h> #include <stdlib.h> main () { int cont; float n1, n2, n3, m; cont = 1; while (cont <= 30) { printf (“Digite 3 notas \n”); scanf (“%f%f%f”, &n1, &n2, &n3); m = (n1 + n2 + n3) /3; printf (“Media: %.2f\n”, m); cont = cont + 1; } system (“PAUSE”); } 149 Contador • Um contador é utilizado para contar o número de vezes que um bloco de instruções é executado. Em estruturas de repetição, um contador ajuda a contar quantas vezes o laço é executado. • Um contador é uma variável que recebe ela mesma mais um valor constante. Exemplo: cont cont + 1 • Um contador deve ser inicializado • Um contador deve ser incrementado cont 1 enquanto (cont <= 30) faça ... cont cont + 1 fimenquanto 150 inicialização incremento Estrutura de Repetição Enquanto Exemplo 2 • Elaborar um algoritmo que leia 10 números inteiros positivos e apresente na tela a soma dos números lidos. • Diagrama de Blocos: 151 Estrutura de Repetição Enquanto Exemplo 2 • Português Estruturado: programa soma var num, cont, acum : inteiro inicio cont 1 acum 0 enquanto (cont <= 10) faça escreva “Numero Positivo: ” leia num acum acum + num cont cont + 1 fimenquanto escreva “Soma: ”, acum fim 152 Estrutura de Repetição Enquanto Exemplo 2 • Linguagem C: #include <stdio.h> #include <stdlib.h> main () { int num, cont, acum; cont = 1; acum = 0; while (cont <= 10) { printf (“Numero Positivo: ”); scanf (“%d”, &num); acum = acum + num; cont = cont + 1; } printf (“Soma: %d\n”, acum); system (“PAUSE”); } 153 Acumulador • Um acumulador, também conhecido como somador, é utilizado para obter somatórios. Em estruturas de repetição, um acumulador ajuda a acumular valores cada vez que um laço é executado. • Um acumulador é uma variável que recebe ela mesma mais o valor de outra variável. Exemplo: acum acum + num • Um acumulador deve ser inicializado • O valor adicionado ao acumulador a cada execução de laço é variável – Diferente do contador, cujo valor adicionado é sempre constante acum 0 enquanto (cont <= 10) faça ... acum acum + num ... fimenquanto 154 inicialização acumulação Estrutura de Repetição Enquanto • O Exemplo 2 utiliza o pré-conhecimento da quantidade de números positivos a serem lidos para calcular a soma. Entretanto, se não soubéssemos quantos números deveriam ser lidos, o que faríamos para controlar o laço de repetição? • Precisaríamos de um laço que fosse executado por uma quantidade indeterminada de vezes. • Assim, teríamos de encontrar outro critério de parada, que possibilitasseque o laço fosse finalizado após o último número positivo (independente de quantos sejam) ter sido informado. • Isso pode ser feito utilizando um valor predefinido como finalizador, a ser informado após o último número positivo. 155 Estrutura de Repetição Enquanto Exemplo 3 • Elaborar um algoritmo que efetue leituras sucessivas de números inteiros positivos até que um número negativo seja informado. Ao final, apresentar a soma dos números positivos informados. • Diagrama de Blocos: 156 Estrutura de Repetição Enquanto Exemplo 3 • Português Estruturado: programa soma var num, acum : inteiro inicio acum 0 escreva “Numero: ” leia num enquanto (num >= 0) faça acum acum + num escreva “Numero: ” leia num fimenquanto escreva “Soma: ”, acum fim 157 Estrutura de Repetição Enquanto Exemplo 3 • Linguagem C: #include <stdio.h> #include <stdlib.h> main () { int num, acum; acum = 0; printf (“Numero: ”); scanf (“%d”, &num); while (num >= 0) { acum = acum + num; printf (“Numero: ”); scanf (“%d”, &num); } printf (“Soma: %d\n”, acum); system (“PAUSE”); } 158 Estrutura de Repetição Repita 159 Estrutura de Repetição Repita • É uma estrutura que realiza um teste lógico no final do laço • Esta estrutura tem o seu funcionamento controlado por decisão, isto é, uma condição, porém executa um conjunto de instruções pelo menos uma vez antes de verificar a validade da condição estabelecida • O comando repita tem seu funcionamento em sentido contrário ao comando enquanto, pois sempre processa um conjunto de instruções no mínimo uma vez até que a condição seja verdadeira • Se a condição for falsa, o laço continua • Se a condição for verdadeira, o laço é encerrado 160 Estrutura de Repetição Repita • Na Linguagem C, o resultado da avaliação da condição é interpretado de maneira inversa ao Diagrama de Blocos/Português Estruturado: – Se a condição for verdadeira, o laço continua – Se a condição for falsa, o laço é encerrado 161 Estrutura de Repetição Repita 162 Português Estruturado repita instruções ateque (condição) Linguagem C do { instruções; } while (condição); Diagrama de Blocos Estrutura de Repetição Repita Exemplo • Elaborar um algoritmo que efetue a leitura de uma série de valores, representando os preços dos itens comprados por cliente. Ao final, apresentar na tela o total a ser pago. Para finalizar a entrada de dados o usuário deve informar o valor zero. • Diagrama de Blocos: 163 Estrutura de Repetição Repita Exemplo • Português Estruturado: programa caixa var p, s : real inicio s 0 repita escreva “Preco: ” leia p s = s + p ateque (p = 0) escreva “Total: ”, s fim 164 Estrutura de Repetição Repita Exemplo • Linguagem C: #include <stdio.h> #include <stdlib.h> int main () { float p, s; s = 0; do { printf (“Preco: ”); scanf (“%f”, &p); s = s + p; } while (p != 0); printf (“Total: %.2f\n”, s); system (“PAUSE”); } 165 Estrutura de Repetição Para 166 Estrutura de Repetição Para • Os laços que possuem um número pré-conhecido de execuções poderão ser processados por meio da estrutura de repetição para • Esta estrutura tem o seu funcionamento controlado por uma variável denominada contador • Executa um determinado conjunto de instruções certo número de vezes 167 Estrutura de Repetição Para 168 Diagrama de Blocos Estrutura de Repetição Para 169 Português Estruturado para variável de inicio até fim passo incremento faça instruções fimpara Linguagem C for (inicialização, condição, incremento) { instruções; } Estrutura de Repetição Para Exemplo • Elaborar um algoritmo que calcule a média aritmética de 3 notas de 30 alunos • Diagrama de Blocos: 170 Estrutura de Repetição Para Exemplo • Português Estruturado: programa media var cont : inteiro n1, n2, n3, m : real inicio para cont de 1 até 30 passo 1 faça escreva “Digite 3 notas” leia n1, n2, n3 m (n1 + n2 + n3) / 3 escreva “Media: ”, m fimpara fim 171 Estrutura de Repetição Para Exemplo • Linguagem C: #include <stdio.h> #include <stdlib.h> int main () { int cont; float n1, n2, n3, m; for (cont = 1; cont <= 30; cont++) { printf (“Digite 3 notas \n”); scanf (“%f%f%f”, &n1, &n2, &n3); m = (n1 + n2 + n3) /3; printf (“Media: %.2f\n”, m); } system (“PAUSE”); } 172 Linguagem C Operadores de Incremento (++) e Decremento (--) • Considere os operadores abaixo que não são comuns em outras linguagens: ++ incrementa de 1 seu operando -- decrementa de 1 seu operando • O operador de incremento (++) incrementa de um seu operando. Exemplo: cont++ equivale a cont = cont + 1 • O operador de decremento (--) decrementa de um seu operando. Exemplo: cont-- equivale a cont = cont - 1 • Os operadores de incremento e decremento devem ser usados somente com operandos que são variáveis, isto é, o operando não pode ser um valor constante. 173 Bibliografia • Manzano, J. A. N. G.; Oliveira, J. F. Algoritmos: Lógica para Desenvolvimento de Programação de Computadores. 21ª ed. Ed. Érica, 2007. • Forbellone, A. L. V. Lógica de Programação. 2ª ed. Ed. Makron Books, 2000. • Evaristo, J. Programando com PASCAL. 2ª ed. 2004. Download: http://professor.ic.ufal.br/jaime/livros/pascal.htm • Mizrahi, V. V. Treinamento em Linguagem C – Módulo I. Ed. Makron Books, 1990. • Schildt, H. C – Completo e Total. Ed. Makron Books, 1995. 174 http://professor.ic.ufal.br/jaime/livros/pascal.htm
Compartilhar