DSC/CCT/UFCG [email protected] Profs.: José Eustáquio Rangel de Queiroz Roberto Medeiros de Faria Carga Horária: 60 h DSC/CCT/UFCG Introdução à Programação [email protected] [email protected] Tópicos 3.1 3.2 3.3 3.4 3.5 3.6 3.7 3.8 3.9 Introdução Algoritmos Pseudocódigo Estruturas de Controle Estrutura de Seleção If Estrutura de Seleção If/Else Estrutura de Repetição While Formulação de Algoritmos: Estudo de Caso 1 (Repetição Controlada por Contador) Formulação de Algoritmos com Refinamento Topdown por Passos: Estudo de Caso 2 (Repetição Controlada por Sentinela) 2 DSC/CCT/UFCG Introdução à Programação [email protected] [email protected] Tópicos 3.10 Formulação de Algoritmos com Refinamento Topdown: Estudo de Caso 3 (Estruturas de Controle Aninhadas) 3.11 Operadores de Atribuição 3.12 Operadores de Incremento e Decremento 3 3.1 Introdução DSC/CCT/UFCG [email protected] [email protected] Precauções antes da escrita de um programa Visão sinóptica do problema Planejamento cuidadoso de uma estratégia para solução do problema Precauções durante a escrita de um programa dos “blocos de construção” Conhecimento disponíveis Uso de princípios adequados de programação 4 3.2 Algoritmos DSC/CCT/UFCG Computação de Problemas Todos os problemas podem ser solucionados a partir da execução de uma série de ações em uma ordem específica [email protected] [email protected] Algoritmo Procedimento em termos de Ações a serem executadas Ordem na qual as ações devem ser executadas Controle do Programa Specificação da ordem na qual as declarações devem ser executadas 5 DSC/CCT/UFCG [email protected] [email protected] Pseudocódigo 3.3 Pseudocódigo Linguagem artificial e informal que auxilia o programador a desenvolver algoritmos Similar ao Português cotidiano Não executada em computadores Suporte para a análise de um programa antes de sua escrita Facilidade de codificação em uma linguagem de programação (e.g. C/C++, Java) Composição a partir de declarações executáveis 6 DSC/CCT/UFCG 3.4 Estruturas Controle de Execução Seqüencial Declarações executadas uma após a outra, na ordem pré-definida (na escrita) [email protected] [email protected] Transferência de Controle Quando a próxima declaração executada não é a seguinte na seqüência Uso excessivo de declarações goto conduz a muitos problemas (código spaghetti) 7 DSC/CCT/UFCG 3.4 Estruturas Controle de Bohm & Jacopini Todos os programas escritos em termos de 3 estruturas de controle Estruturas Seqüenciais [email protected] [email protected] Por default, programas executados seqüencialmente (como ocorre em C) Estruturas de Seleção Há três tipos em C: if, if/else e switch Estruturas de Repetição Há três tipos em C: while, do/while e for 8 DSC/CCT/UFCG 3.4 Estruturas Controle de [email protected] [email protected] Diagrama de Fluxo (Flowchart) Representação gráfica de um algoritmo Uso de símbolos especiais conectados por setas denominadas linhas de fluxo (flowlines) Retângulo (ação) Indicação de algum tipo de ação Incrementar j Oval Indicação do início ou término de um programa ou uma seção de código Início 9 DSC/CCT/UFCG 3.4 Estruturas Controle de Estruturas de controle única entrada/ única [email protected] [email protected] saída Conexão da saída de uma estrutura de controle à entrada da estrutura seguinte (empilhamento de estruturas de controle) Facilidade de construção de programas 10 DSC/CCT/UFCG 3.5 Estrutura de Seleção if Estrutura de Seleção Uso na escolha entre cursos de ação alternativos [email protected] [email protected] Exemplos em pseudocódigo 1. Se a média final do aluno for maior ou igual a 7 Imprima “Você passou por média” 2. Se o raio for menor do que 3 ou maior ou igual a 6 Faça raio igual a 5 3. Se o nome for diferente de RAQUEL Encerre o programa 11 3.5 Estrutura de Seleção if DSC/CCT/UFCG Estrutura de Seleção Análise Condição Verdadeira [email protected] [email protected] Execução da declaração imprima “Você passou por média” e prosseguimento do programa a partir da próxima declaração Condição Falsa do Exemplo 1 Declaração imprima “Você passou por média” ignorada e prosseguimento do programa a partir da próxima declaração Adentação facilita a leitura de programas C ignora espaços em branco 12 DSC/CCT/UFCG 3.5 Estrutura de Seleção if Estrutura de Seleção Declaração do Exemplo 1 em C if(media_final >= 7) printf(“Você passou por média\n"); [email protected] [email protected] Código em C apresenta próxima ao pseudocódigo uma representação Losango (decisão) Indicação de que uma decisão deve ser tomada Continência de uma expressão que pode ser Verdadeira ou Falsa Teste da condição Seleção do caminho apropriado Média final ≥ 7 F ? V 13 DSC/CCT/UFCG 3.5 Estrutura de Seleção if A estrutura de seleção if é uma estrutura do [email protected] [email protected] tipo única entrada / única saída Média final ≥ 7 ? V F Uma decisão pode ser tomada em qualquer expressão zero - Falsa diferente de zero - Verdadeira Imprimir “V. passou por média” 14 DSC/CCT/UFCG 3.6 Estrutura de Seleção ifelse If Só executa uma ação se a condição testada for Verdadeira [email protected] [email protected] If/Else Especifica um par de ações a serem executadas, uma caso a condição testada seja Verdadeira, outra caso esta seja Falsa 15 DSC/CCT/UFCG 3.6 Estrutura de Seleção ifelse If/Else Exemplo em pseudocódigo [email protected] [email protected] Se a média final do aluno for maior ou igual a 7,0 Imprima “Você passou por média” Caso contrário Imprima “Você vai para a final ou foi reprovado por média” Observe que a adentação/ espaçamento facilita a leitura do pseudocódigo, o mesmo ocorrendo mais efetivamente com o código em qualquer linguagem de programação escolhida 16 3.6 Estrutura de Seleção ifelse DSC/CCT/UFCG If/Else [email protected] [email protected] Código em C if(media_final >= 7) printf(“Você passou por média\n"); else printf("Você vai para a final ou foi reprovado por média\n"); Operador condicional ternário ? : Uso de três argumentos condição ? valor1 se verdadeira : valor2 se falsa 17 DSC/CCT/UFCG 3.6 Estrutura de Seleção ifelse If/Else Código em C com ? : [email protected] [email protected] media_final >= 7 ? printf(“Você passou por média\n”) : printf(“Você vai para a final ou foi reprovado por média \n”); ou printf("%s\n", media_final >= 7 ? "Você passou por média" : "Você vai para a final ou foi reprovado por média" ); 18 3.6 Estrutura de Seleção ifelse DSC/CCT/UFCG Diagrama de fluxo da estrutura If/Else [email protected] [email protected] Média final ≥ 7 ? F V Imprimir “V. passou por média” Estruturas Imprimir “V. vai para a final ou foi reprovado por média” If/Else aninhadas Teste para casos múltiplos Inserção de estruturas de seleção If/Else em uma estrutura de seleção If/Else 19 DSC/CCT/UFCG 3.6 Estrutura de Seleção ifelse Pseudocódigo para uma estrutura If/Else [email protected] [email protected] aninhada Se nota for maior ou igual a 9,0 Imprima “Conceito A” Caso contrário Se nota for maior ou igual a 8,0 e menor do que 9,0 Imprima “Conceito B” Caso contrário Se nota for maior ou igual a 7,0 e menor do que 8,0 Imprima “Conceito C” Caso contrário Se nota for maior ou igual a 6,0 e menor do que 7,0 Imprima “Conceito D” Caso contrário Imprima “Conceito I” 20 DSC/CCT/UFCG 3.6 Estrutura de Seleção ifelse [email protected] [email protected] Atribuição Composta Série de atribuições encerradas por um par de chaves ({ }) Exemplo if ( media_final >= 7 ) printf( “Você passou por média\n" ); else { printf( “Se sua soma de notas for maior do que 12,5, você vai para a final\n" ); printf(“Caso contrário, você foi reprovado\n"); } 21 DSC/CCT/UFCG 3.6 Estrutura de Seleção ifelse Atribuição Composta Análise do exemplo Sem as chaves, a declaração [email protected] [email protected] printf(“Caso contrário, você foi reprovado\n"); seria executada automaticamente Com as chaves, a referida declaração só será executada se o if for falso 22 DSC/CCT/UFCG 3.6 Estrutura de Seleção ifelse Blocos Atribuições compostas por declarações Erros de Sintaxe [email protected] [email protected] Percebidos e acusados pelo compilador Erros Lógicos Exercem influência no tempo de execução do programa Não fatais Execução do programa Saída incorreta Fatais Encerramento prematuro do programa 23 DSC/CCT/UFCG 3.7 Estrutura de Repetição while Estrutura de Repetição Especificação de uma ação a ser repetida enquanto uma dada condição permanecer [email protected] [email protected] Verdadeira Exemplo de pseudocódigo Enquanto houver itens no carrinho de compras Retire um item e adicione seu preço ao somatório de itens já computados O laço while será repetido até que a condição imposta se torne falsa 24 DSC/CCT/UFCG 3.7 Estrutura de Repetição while Exemplo while(item > 0) { item = item -1; total_a_pagar = total_a_pagar + custo_item; [email protected] [email protected] } Retire um item e adicione seu preço ao total a pagar Item > 0 ? V F 25 DSC/CCT/UFCG 3.8 Formulação Algoritmos I de [email protected] [email protected] Repetição controlada por contador Laço repetido até que o contador atinja um determinado limiar (pré-definido pelo programador) Repetição Delimitada Número de repetições é conhecido Exemplo Uma turma com 40 alunos fez uma prova. As notas da prova (números reais com uma casa decimal, na faixa de 0,0 a 10,0) estão disponíveis. Determinar a média da turma na referida prova. 26 DSC/CCT/UFCG 3.8 Formulação Algoritmos I de Repetição controlada por contador [email protected] [email protected] Exemplo de Pseudocódigo Faça total igual a zero Faça o contador de notas igual a um Enquanto o contador de notas for menor ou igual a 40 Pegue uma nota Adicione a nota ao total Adicione um ao contador de notas Determine a média da turma dividindo total por 40 Imprima a média da turma 27 DSC/CCT/UFCG 3.8 Formulação Algoritmos I de [email protected] [email protected] Repetição controlada por contador 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 /* Programa 01 - Média de uma turma de 40 alunos usando repetição controlada por contador */ #include <stdio.h> int main() { int contador, nota, total, media; /* fase de inicialização */ total = 0; contador = 1; /* fase de processamento */ while (contador <= 40) { printf(“Digite nota: "); scanf("%d", ¬a); total = total + nota; contador = contador + 1; } 22 /* fase de conclusão */ 23 media = total / 40; 24 printf(“A média da turma é %d\n", media); 25 26 return 0; /* indica que o programa terminou satisfatoriamente */ 27 } Exemplo de Saída Digite nota: Digite nota: Digite nota: Digite nota: Digite nota: Digite nota: Digite nota: Digite nota: Digite nota: Digite nota: 9,8 6,4 7,7 9,2 5,8 3,9 5,1 9,3 8,3 2,8 Digite nota: Digite nota: Digite nota: Digite nota: Digite nota: Digite nota: Digite nota: Digite nota: Digite nota: Digite nota: 9,7 8,8 8,5 5,9 6,8 7,8 8,8 9,1 9,4 4,8 Digite nota: 1,8 Digite nota: 9,7 Digite nota: 2,8 Digite nota: 7,8 Digite nota: 3,5 Digite nota: 5,1 Digite nota: 7,0 Digite nota: 6,3 Digite nota: 6,1 Digite nota: 7,0 Digite nota: 5,8 Digite nota: 7,2 Digite nota: 9,0 Digite nota: 2,9 Digite nota: 7,3 Digite nota: 3,8 Digite nota: 7,5 Digite nota: 8,9 Digite nota: 8,2 Digite nota: 6,6 A média da turma foi 6,8 28 DSC/CCT/UFCG 3.9 Formulação Algoritmos II de Algoritmos com Refinamento Top-Down por Passos [email protected] [email protected] Delineamento do Problema sobre o Exemplo Anterior Desenvolvimento de um programa para a determinação da média de uma turma, considerando que o programa processará um número arbitrário de notas cada vez que for executado Número desconhecido de alunos Como o programa será finalizado? 29 DSC/CCT/UFCG 3.9 Formulação Algoritmos II de Algoritmos com Refinamento Top-Down por Passos (Stepwise) Solução do Problema [email protected] [email protected] Uso de um valor “sentinela” Também denominado valor de sinalização, testade-ferro, dummy value ou flag Indicação do final da entrada de dados Laço finalizado quando o usuário passa para o programa o valor “sentinela” Valor sentinela não deve ser confundido com uma entrada regular (e.g. -1 no caso do programa da média das notas) 30 DSC/CCT/UFCG 3.9 Formulação Algoritmos II de Refinamento Top-Down por Passos Representação pseudocódigo do topo (top) em [email protected] [email protected] Determine a média da turma Divisão do topo em tarefas menores e listagem ordenada das tarefas Inicialize as variáveis Receba as notas digitadas, some-as e conte-as Calcule e imprima a média da turma 31 DSC/CCT/UFCG 3.9 Formulação Algoritmos II de Fases de diversos programas Initialização [email protected] [email protected] Processamento Fase na qual são atribuídos valores iniciais às variáveis do programa Fase de aquisição dos valores dos dados de entrada e de manipulação apropriada das variáveis do programa Finalização Fase de cálculo e impressão dos resultados finais 32 DSC/CCT/UFCG 3.9 Formulação Algoritmos II de Refinamento da Fase de Inicialização Inicialize as variáveis Inicialize total com zero [email protected] [email protected] Inicialize contador com zero Refinamento da 2ª linha do pseudocódigo Receba as notas digitadas, some-as e conte-as Receba a primeira nota (que poderá ser a “sentinela”) Enquanto o usuário não digitar o valor “sentinela” Adicione esta nota a total Adicione um a contador Receba a próxima nota (que poderá ser a “sentinela”) 33 DSC/CCT/UFCG 3.9 Formulação Algoritmos II de Refinamento da 3ª linha do pseudocódigo Calcule e imprima a média da turma [email protected] [email protected] Se contador for diferente de zero Calcule média dividindo total por contador Imprima média Caso contrário Imprima “Nenhuma nota foi digitada” 34 DSC/CCT/UFCG 3.9 Formulação Algoritmos II de [email protected] [email protected] Repetição controlada por sentinela 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 /* Programa 02 – Média de uma turma com repetição controlada por sentinela */ #include <stdio.h> int main() { float media; /* novo tipo de dados */ int contador, nota, total; /* fase de inicialização */ total = 0; contador = 0; /* fase de processamento */ printf( “Digite nota, -1 ao final: " ); scanf( "%d", ¬a ); 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 while ( nota != -1 ) { total = total + nota; contador = contador + 1; printf( “Digite nota, -1 ao final: " ) scanf( "%d", ¬a ); } /* fase de finalização */ if ( contador != 0 ) { media = ( float ) total / contador; printf( “A média da turma é %.2f", media ); } else printf( "Nenhuma nota foi digitada\n" ); return 0; /* indica que o terminou satisfatoriamente */ programa 35 } 35 DSC/CCT/UFCG 3.9 Formulação Algoritmos II de Repetição controlada por sentinela [email protected] [email protected] Exemplo de Saída Digite nota: 5,8 Digite nota: 9,3 Digite nota: 6,1 Digite nota: 7,8 Digite nota: 7,2 Digite nota: 7,1 Digite nota: 8,2 Digite nota: 6,8 Digite nota: 5,5 Digite nota: 6,1 Digite nota: 8,9 Digite nota: 6,9 Digite nota: 5,8 Digite nota: 6,0 Digite nota: 7,3 Digite nota: 9,5 Digite nota: 8,8 Digite nota: 5,4 Digite nota: 9,8 Digite nota: 7,8 Digite nota: 9,0 Digite nota: 7,0 Digite nota: 8,8 Digite nota: 7,8 Digite nota: 8,2 Digite nota: 1,2 Digite nota: 6,9 Digite nota: 9,0 Digite nota: 4,0 Digite nota: 8,9 Digite nota: 6,5 Digite nota: 5,3 Digite nota: 4,5 Digite nota: 4,8 Digite nota: 5,8 Digite nota: 7,5 Digite nota: 7,1 Digite nota: 9,5 Digite nota: 7,7 Digite nota: -1 A média da turma é 7,0 Situação totalizando 39 notas (observe a última entrada do usuário, -1) 36 DSC/CCT/UFCG 3.10 Estruturas Aninhadas de Controle [email protected] [email protected] Problema Em uma universidade privada, seja uma lista com os resultados de uma prova aplicada em uma turma de 30 alunos, na qual atribui-se 1 a cada aluno aprovado e 2 a cada aluno reprovado Escrever um programa que analise os resultados Se mais de 25 alunos forem aprovados, deverá ser comunicado à turma o aumento da mensalidade em 10% (face ao êxito do ensino) 37 DSC/CCT/UFCG 3.10 Estruturas Aninhadas de Controle Comentários Processamento de 30 resultados de teste pelo programa escrito [email protected] [email protected] Uso de dois contadores Uso de um laço controlado por contador Um para o número de aprovados, outro para o número de reprovados Cada resultado testado é um número - 1 ou 2 Se o número for diferente de 1, dever-se-á considerar que este é igual a 2 38 DSC/CCT/UFCG 3.10 Estruturas Aninhadas de Controle Delineamento do nível de topo Analise os resultados da prova e decida se a mensalidade deve ser aumentada em 10% 1º Refinamento do pseudocódigo [email protected] [email protected] Inicialize variáveis Receba os 30 valores e conte as aprovações e reprovações Imprima um sumário dos resultados da prova e decida se a mensalidade deve ser aumentada em 10% Refinamento da 1ª linha Inicialize aprovados com zero Inicialize reprovados com zero Inicialize contalunos com um 39 DSC/CCT/UFCG 3.10 Estruturas Aninhadas de Controle Refinamento da 2ª linha Enquanto contalunos for menor ou igual a 30 Receba o próximo resultado da prova Se o aluno foi aprovado [email protected] [email protected] Adicione um a aprovados caso contrário Adicione um a reprovados Adicione um a contalunos 40 DSC/CCT/UFCG 3.10 Estruturas Aninhadas de Controle Refinamento da 3ª linha Imprima o número de aprovados Imprima o número de reprovados [email protected] [email protected] Se mais de 25 alunos tiverem sido aprovados Imprima “A mensalidade será aumentada em 10%” 41 DSC/CCT/UFCG 3.10 Estruturas Aninhadas de Controle Estruturas de Controle Aninhadas 1 /* Programa 03 - Análise dos resultados [email protected] [email protected] */ 3 #include <stdio.h> 4 5 int main() 6 { 7 /*initialização de variáveis em declarações*/ 8 int aprovados = 0, reprovados = 0, contalunos = 1, resultado; 9 10 11 12 13 14 15 16 17 18 /*loop controlado por contador para processamento de 30 alunos*/ while (contalunos <= 30) { printf(“Digite resultado ( 1 = aprovado, 2 = reprovado ): "); scanf("%d", &resultado); if ( resultado == 1 ) /*if/else aninhado no while*/ aprovados = aprovados + 1; else reprovados = reprovados + 1; 19 20 21 22 23 24 25 26 27 contalunos = contalunos + 1; } printf( “Aprovados %d\n", aprovados ); printf( “Reprovados %d\n", reprovados ); if ( aprovados > 25 ) printf( “A mensalidade será” “aumentada em 10%\n" ); 28 29 return 0; /* finalização satisfatória */ 30 } 42 DSC/CCT/UFCG 3.10 Estruturas Aninhadas de Controle Estruturas de Controle Aninhadas [email protected] [email protected] Exemplo de Saída Digite resultado: Digite resultado: Digite resultado: Digite resultado: Digite resultado: Digite resultado: Digite resultado: Digite resultado: Digite resultado: 1 1 2 1 1 1 1 1 2 Digite resultado : 1 Digite resultado : 1 Digite resultado : 1 Digite resultado : 1 Digite resultado : 2 Digite resultado : 1 Digite resultado : 1 Digite resultado : 2 Digite resultado : 1 Digite resultado: 2 Digite resultado: 1 Digite resultado: 1 Digite resultado: 2 Digite resultado: 1 Digite resultado: 1 Digite resultado: 1 Digite resultado: 2 Digite resultado: 1 Aprovados: 23 Reprovados: 7 43 DSC/CCT/UFCG 3.10 Estruturas Aninhadas de Controle Comentários Processamento de 30 resultados de teste pelo programa escrito [email protected] [email protected] Uso de dois contadores Uso de um laço controlado por contador Um para o número de aprovados, outro para o número de reprovados Cada resultado testado é um número - 1 ou 2 Se o número for diferente de 1, dever-se-á considerar que este é igual a 2 44 DSC/CCT/UFCG 3.11 Operadores Atribuição de Operadores de Atribuição Abreviação de expressões de atribuição Exemplo em C c = c + 3; [email protected] [email protected] Abreviação a partir do operador de atribuição de adição c += 3; Forma de atribuição variável = expressão do operador de variável; Re-escrita operador de variável = expressão; 45 DSC/CCT/UFCG 3.11 Operadores Atribuição de [email protected] [email protected] Exemplos de outros operadores de atribuição d -= 4 (d = d - 4) e *= 5 (e = e * 5) f /= 3 (f = f / 3) g %= 9 (g = g % 9) 46 DSC/CCT/UFCG 3.12 Operadores Incremento/Decremento de Operador de Incremento (++) Uso em substituição de +=1 [email protected] [email protected] Operador de Decremento (--) Uso em substituição de -=1 Pré-incremento/ Pré-decremento Operador usado antes da variável ( ++c ou --c) Variável alterada (incrementada/decrementada) antes da avaliação da expressão 47 DSC/CCT/UFCG 3.12 Operadores Incremento/Decremento de [email protected] [email protected] Pós-incremento/Pós-decremento Operador usado após da variável (c++ ou c--) Expressão executada antes da (incremento/decremento) da variável alteração Se c igual a 5 printf( "%d", ++c ); Imprimirá 6 printf( "%d", c++ ); Imprimirá 5 Em todo caso, c assume agora o valor 6 48 DSC/CCT/UFCG 3.12 Operadores Incremento/Decremento de Quando a variável não está numa expressão [email protected] [email protected] Pré-incremento e pós-incremento apresentam mesmo efeito ++c; printf( “%d”, c ); Apresenta o mesmo efeito de c++; printf( “%d”, c ); 49 DSC/CCT/UFCG José Eustáquio Rangel de Queiroz Roberto Medeiros de Faria UNIVERSIDADE FEDERAL DE CAMPINA GRANDE CENTRO DE CIÊNCIAS E TECNOLOGIA [email protected] DEPARTAMENTO DE SISTEMAS E COMPUTAÇÃO