Baixe o app para aproveitar ainda mais
Prévia do material em texto
Apostila de Algoritmos e Estrutura de Dados I Professor: Sinaide Nunes Bezerra 2________________________________________ Algoritmos e Estrutura de Dados I 1. ALGORITMOS COMPUTACIONAIS Segundo Cormem (2001) um algoritmo computacional pode ser entendido como “... qualquer procedimento computacional bem definido que toma algum valor ou conjunto de valores como entrada e produz algum valor ou conjunto de valores como saúda. Portanto, um algoritmo é uma sequência de passos computacionais que transformam a entrada na saída”. Outras definições: – “Algoritmo é uma seqüência de passos que visa atingir um objetivo bem definido” (FORBELLONE, 1999) – “Algoritmo é a descrição de uma seqüência de passos que dever ser seguida para a realização de uma tarefa” (ASCENCIO, 1999). – “Algoritmo é uma seqüência finita de instruções ou operações cuja execução, em tempo finito, resolve um problema computacional, qualquer que seja sua instância” (SALVETTI, 1999). – “Algoritmo são regras formais para a obtenção de um resultado ou da solução de um problema, englobando fórmulas de expressões aritméticas” (MANZANO, 1997). – “Ação é um acontecimento que, a partir de um estado inicial, após um período de tempo finito, produz um estado final previsível e bem-definido. Portanto, um algoritmo é a descrição de um conjunto de comandos que, obedecidos, resultam numa sucessão finita de ações” (FARRER, 1999). Com vistas às definições citadas, pode-se dizer que: Um algoritmo é como uma “receita de bolo” para o computador, onde estão definidos todos os comandos que ele deve executar para se chegar a um resultado. Daí, temos que, o algoritmo é uma seqüência de instruções, onde cada instrução representa uma AÇÃO que deve ser entendida e realizada. Em algoritmos computacionais, o computador possui um conjunto limitado de instruções e o algoritmo deve ser expresso nos termos destas instruções. O computador utiliza dois conceitos básicos para construir e interpretar algoritmos, são eles: Estruturas de Dados � para manipulação das informações Estruturas de Controle� para manipulação das ações Discursão Discuta com o professor qual a importância de se desenvolver algoritmos. 3________________________________________ Algoritmos e Estrutura de Dados I 2. TIPOS DE ALGORITMOS Descrição Narrativa: A descrição narrativa consiste em analisar o enunciado do problema e escrever, utilizando um linguagem natural (por exemplo, a língua portuguesa), os passos a serem seguidos para rsolução do problema ( semelhante a escrever uma receita ). • Vantagem: Não é necessário aprender nenhum conceito novo, pois uma língua natural já é bem conhecida. • Desvantagem: A linguagem natural (não padronizada e informal) abre espaço para várias interpretações. Será mais difícil estrutura-la e transcrever este algoritmo para uma linguagem de programação. Fluxograma: Analisar o enunciado do problema e escrever, utilizando símbolos gráficos pré-definidos, os passos a serem seguidos para a resolução do problema. • Vantagem: Visão geral do fluxo de processamento. • Desvantagem: É necessário aprender a simbologia dos fluxogramas e, além disso o algoritmo resultante não apresenta muitos detalhes, dificultando sua transcrição para uma linguagem de programação. Os símbolos utilizados para representar o uso em fluxograma podem variar dependendo do autor. A seguir é apresentada a lista de símbolos a ser utilizada nas aulas deste curso. Indica o início ou fim do algoritmo. Leitura de dados. Processamento dos dados. Saída de dados Pseudocódigo: Consiste em analisar o enunciado do problema e escrever, por meio de regras predefinidas, os passos a serem seguidos para a resolução do problema. Início / fim processamento entrada Escrita 4________________________________________ Algoritmos e Estrutura de Dados I • Vantagem: A passagem (transcrição) do algoritmo para uma linguagem de programação é quase imediata, bastando conhecer as regras e palavras reservadas da linguagem que será utilizada. • Desvantagem: É necessário aprender as regras do pseudocódigo, que serão apresentadas nas próximas aulas. 3. ESTRUTURAS DE DADOS Uma estrutura de dados é um meio para armazenar e organizar dados com o objetivo de facilitar o acesso e as modificações. Nenhuma estrutura de dados única funciona bem para todos os propósitos, e assim é importante conhecer os pontos fortes e as limitações de várias delas (CORMEN, 2001). As estruturas de dados representam as informações do problema a ser resolvido. Tais estruturas estão organizadas em tipos distintos de informações. Dentro do escopo das estruturas de dados, define-se os seguintes termos: - Constante, Variável e Identificador. • Constantes Representam valores constantes, ou seja, que não variam no decorrer do algoritmo. Exemplo 1: Seja x = 2, efetuando as seguintes operações: y = x² � y = 4 A = 3x² + 5x � A = 3*(2)² + 5 * 2 � A = 22 Exemplo 2: Seja PI = 3,14, efetuando as seguintes operações: A = PI .*1 � A = 3,14 A = PI * 2 � A = 6,28 A = PI * 3 � A = 9,42 Nos exemplos 1 e 2, tanto o valor de x quanto PI não variam a medida que as operações são executadas. • Variáveis Representam informações cujos valores são modificados ao longo do tempo. Exemplo 1: 5________________________________________ Algoritmos e Estrutura de Dados I Deseja-se saber o salário de um funcionário considerando que ele recebe R$ 1.000, 00 por mês, supondo que teve um aumento de 20% e deve-se descontar 8% de INSS do novo salário, qual será o salário liquído? R.) salario = 1.000 reajuste = salario * 0,2 salario = salario + reajuste imposto = salario * 0,08 salario = salario - imposto Matematicamente, variável é a representação simbólica dos elementos de um certo conjunto. Computacionalmente, pode-se definir variável como um local reservado na memória do computador usado para armazenar dados. Uma variável possui nome (identificador) e tipo, possui apenas um valor em um determinado instante, mas seu conteúdo pode variar ao longo do tempo. O conceito de variável, em computação, corresponde a posições de memória RAM (Random Access Memory) onde são armazenados os dados manipulados pelo programa quando este for executado. • Identificador Nome de um local onde se pode colocar qualquer valor do conjunto de valores possíveis de um tipo básico associado. Usado para manipular os dados necessários no algoritmo. O identificador é também usado para rotular valores constantes, assim como o nome PI, utilizado no exemplo 2, em constantes (o identificador PI foi utilizado para representar o valor constante 3,14). Regras para formação de identificadores: • Começar sempre o nome com uma letra ou o caractere sublinhado “_”; • Não usar espaços em branco, pontuação, acentos nem caracteres especiais (@, #, etc); • Não usar palavras reservadas, ou seja, palavras que pertençam a linguagem de programação que estiver sendo usada (ex: if, for, case, int, etc). 6________________________________________ Algoritmos e Estrutura de Dados I � Importante: Um identificador deve representar o melhor possível o papel da variável no algoritmo Ex. de identificadores válidos: nota, nota1, nota_1, operador, salario, nome, x, y, enderecoResidencial, aluno01, preco_produto, Area, Tensao_A, tensao_B, media, soma, S. Ex. de identificadores inválidos: 1K, nota 1, salário,nome, x@1, y%2, aluno 01, preco produto. 4. TIPOS PRIMITIVOS DE DADOS São os grupos de informações que o computador manipula. Podem ser: 1. Numéricos a) Inteiros. Ex: ...-100... -2, -1, 0, 1, 2, ..., 100, ... b) Reais. Ex: ... -100, ..., -50.2, ..., -2, ..., -1.5, ..., 0, ..., 1, ..., 2, ..., 25.12, ... 2. Não-numéricos a) Literal, caractere ou alfanuméricos. Ex: “ESCOLA” “livro” “18” “R$ 55,36”... b) Lógicos ou booleanos. Ex: Falso, Verdadeiro (ou F, V) Obs: O delimitador usado para alfanuméricos pode ser : “ ” ou ‘ ‘. Sistema BINÁRIO – Base 2 Computadores trabalham com o sistema numérico binário. Nesse sistema todos dados são transformados em 0 e 1 (zeros e uns) para então serem armazenados na memória. Cada dígito binário “bit” (0 ou 1) ocupa porções de memória chamadas bytes formadas por conjunto de 8 bits. bit = 0 ou 1 byte – conjunto de 8 bits, identificado e acessado por um endereço de memória Declaração de Variáveis 7________________________________________ Algoritmos e Estrutura de Dados I É a criação (ou definição) de locais na memória rotulados com o identificador da variável (ou constante) que será utilizado no algoritmo para a manipulação de um determinado tipo de informação. a) Todas as variáveis utilizadas em algoritmos serão definidas no início do mesmo, por meio de um comando de uma das formas seguintes: <tipo_da_variável>:<identificador>; <tipo_da_variável>:<identificador1, identificador2, ..., identificadorn>; b) Em uma mesma linha podem ser definidas uma ou mais variáveis do mesmo tipo, separando-se os nomes das mesmas por vírgulas. c) Variáveis de tipos diferentes devem ser declaradas em linhas diferentes. Ao se declarar uma variável ainda não existe nenhum valor associado a mesma. A atribuição de valores deve ser executada no corpo do algoritmo destinado as tais ações. Para facilitar o entendimento do algoritmo, comentários podem ser introduzidos para explicar determinados trechos do algoritmo ou dado utilizado, para inserir um comentário utiliza-se { } (chaves). Eles podem ser colocados em qualquer ponto do algoritmo, desde de que os delimitadores { } sejam utilizados. Exemplo de declaração de variáveis: inteiro: Idade; real: salario; caracter: Nome; lógico: temFilhos; No exemplo anterior, foram declaradas quatro variáveis, sendo elas: 1) A variável Nome, capaz de armazenar dados literais; 2) A variável Idade, capaz de armazenar um número inteiro; 3) A variável salario, capaz de armazenar um número real; 4) A variável temFilhos, capaz de armazenar um valor lógico (V ou F). Exercícios 1) Assinale com ‘C’ os identificadores corretos e com ‘E’ os errados, explique o que está errado. ( ) tensao ( ) _H2O ( ) nota*do*aluno ( ) a1b2c3 ( ) 16 x 9 ( ) Pedro ( ) nome empresa ( ) km/h 8________________________________________ Algoritmos e Estrutura de Dados I ( ) V.t ( ) "nota" ( ) sala1021 ( ) ah! 2) Supondo que as variáveis Mat, Nome, Curso, Nota sejam utilizadas para armazenar a matrícula, nome, curso e nota do aluno, declare corretamente as variáveis, associando-se o tipo adequado. 5. OPERAÇÕES BÁSICAS Comando de Atribuição em Pseudocódigo O comando de atribuição é utilizado para atribuir valores ou operações a variáveis, sendo representado pelo símbolo . Exemplo: X 4; X X + 2; Y “aula”; TESTE_1 Falso; nome “Escola”; pi 3.14; erro verdadeiro; {ou, simplesmente, Erro = V} media (p1 + p2)/2; Comando de Entrada em Pseudocódigo O comando de entrada é utilizado para receber dados digitados pelo usuário. Os dados recebidos são armazenados em variáveis (espaços endereçados na memória de um computador). Esse comando é em pseudocódigo representado pela palavra Leia. Exemplo: leia (X); leia (X, Y, Z); Comando de Saída em Pseudocódigo O comando de saída é utilizado para mostrar dados na tela ou impressora. Esse comando é em pseudocódigo representado pela palavra “escreva”, os dados podem ser conteúdos de variáveis ou mensagens pré-definidas no algoritmo. 9________________________________________ Algoritmos e Estrutura de Dados I Exemplo: //escreverá o valor da variável X escreva (X); //escreverá a mensagem entre as aspas e em seguida o valor da variável X escreva (“o valor é”, X); Comando de Atribuição em Pseudocódigo Serve para atribuir (ou associar) um valor a uma variável ou constante. Representa-se através do símbolo “”. Exemplo: X 2; Nome = “Escola”; Estrutura Sequencial em Pseudocódigo Na estrutura sequencial os comandos de um algoritmo são executados numa sequência pré-estabelecida. Cada comando é executado somente após o término do comando anterior. Em termos de fluxogramas, a estrutura sequencial é caracterizada por um único fluxo de execução (um único caminho orientado) no diagrama. Em pseudocódigos, a estrutura sequencial caracteriza-se por um conjunto de comandos dispostos ordenadamente. Estrutura básica: início //identificação do início do bloco correspondente ao algoritmo //declaração das variávieis tipo: variável1, variável2; //Comando(s) de entrada leia (variável1, variável2); //Ações a serem executadas <instrução_1> <instrução_2> . . . <instrução_n> escreva (“Mensagem pré-determinada”, variável1); fim. Exemplo1: Algoritmo que calcule a soma de dois valores informados pelo usuário. início 10________________________________________ Algoritmos e Estrutura de Dados I real: a, b, c; leia a, b; c a + b; escreva (“A soma é”, c); Fim. Exemplo2: Algoritmo para calcular a média de um aluno baseada em quatro notas. início //declaração de variáveis real: p1, p2, p3, p4, media; //comandos de entrada de dados} leia (p1, p2, p3, p4); //processamento - cálculo da média} media (p1 + p2 + p3 + p4)/4; //saída de dados} escreva (“Média final = “, Media); fim. Exercícios de fixação 1) Faça 02 exemplos para cada um dos conceitos abaixo: a) entrada de dados b) saída de dados c) declaração de variáveis d) inicialização de variáveis e) atribuição do resultado de uma expressão aritmética a uma variável 2) Utilizando tipos primitivos de dados, crie declarações de variáveis, que armazenem as seguintes informações: o nome de uma figura geométrica, a quantidade de lados, a área, o perímetro e se a figura é regular ou não. 3) Faça um algoritmo que leia uma sequência de caracteres e apresente-a como saída, precedida da mensagem “A palavra informada é “. 4) Faça um algoritmo que calcule a multiplicação e divisão de dois valores informados pelo usuário. 5) Desenvolva um algoritmo que: a) Leia 4 (quatro) números b) Calcule o quadrado para cada um c) Somem todos e 11________________________________________ Algoritmos e Estrutura de Dados I d) Mostre o resultado Estrutura Sequencial na linguagem C/C++ Definição de início e fim de um bloco de código em C/C++: #include <nome da biblioteca> void main() { Bloco de comandos; } Bibliotecas são arquivos contendo várias funções que podem ser chamadas no programa que as importarem. Ex: As bibliotecas iostream.h e conio.h permitem a utilização de diversos comandos de entrada e saída. Declaração de Variáveis em EM C/C++ � Importante A linguagem C/C++ é sensível a letras maiúsculas e minúsculas (case sensitive), ou seja, considera que letras maiúsculassão diferentes de minúsculas e , portanto uma variável identificada por Media será diferente de outra identificada por MEDIA ou mesmo media. As variáveis são declaradas após a especificação de seus tipos. Os tipos de dados mais usandos são: int (para números inteiros) , float (para números reais) e char (para um caractere). A linguagem C/C++ não possui tipo de dados LOGICO (boolean que pode assumir verdadeiro ou falso), pois considera qualquer valor diferente de 0 (zero) como sendo verdadeiro. A linguagem C/C++ não possui um tipo especial para armazenar cadeias de caracteres (strings). Deve-se, quando necessário, utilizar um vetor contendo vários elementos do tipo char. Os vetores serão abordados no Capítulo 5. Exemplo de declarações: Declaração de uma variável denominada X, onde pode ser armazenado um número real a cada instante. float X; 12________________________________________ Algoritmos e Estrutura de Dados I Declaração de duas variáveis denominadas Y e Z, onde cada uma contem um número real float Y, Z; Declaração de uma variável denominada sexo, onde pode ser armazenado um único caractere. char sexo; declara uma variável chamada NOME, onde podem ser armazenados 40 caracteres char NOME[40] COMANDO DE ATRIBUIÇÃO EM C/C++ O comando de atribuição é utilizado para atribuir valores ou operações a variáveis, sendo representado por = (sinal de igualdade). Exemplo: X = 4; X = X + 3; Y = 2.5; sexo = ‘f’; Em C/C++ os caracteres são representados entre apóstrofos (‘). As cadeias de caracteres devem ser representadas entre aspas (“). Caso seja necessário aramazenar uma cadeia de caracteres dentro de uma variável, deve-se utilizar uma função para manipulação de caracteres, conforme apresentado a seguir: strcpy(nome, “João”); Para que seja possível a utilização da função strcpy deve-se inserir ao programa, por meio da diretiva include, a biblioteca string.h. As funções de manipulação de strings serão abordadas no Capítulo 7. IMPORTANTE! – Em C/C++ cada linha de comando é finalizada com o sinal de ponto-e-vírgula (;) . 13________________________________________ Algoritmos e Estrutura de Dados I COMANDO DE ENTRADA EM C/C++ O comando de entrada é utilizado para receber dados digitados pelo usuário. Os dados recebidos são armazenados em variáveis. Os comandos de entrada mais utilizados em C são: Entrada de dados: scanf, cin, gets Ex: Um valor digitado pelo usuário será armazenado na variável X. scanf(“%f”, &X); cin >> X; Um ou vários caracteres digitados pelo usuário serão armazenados na variável NOME. gets(NOME); O comando gets deve ser utilizado quando se deseja digitar uma cadeia contendo espaços em branco, por exemplo, um nome completo como João da Silva. O comando cin consegue armazenar os caracteres até que seja encontrado o primeiro espaço em branco e os caracteres posteriores serão desprezados (sendo assim, seria armazenado apenas João). O comando gets e o comando scanf armazenam toda a cadeia até que seja pressionada a tecla ENTER. COMANDO DE SAÍDA EM C/C++ O comando de saída é utilizado para mostrar dados na tela ou na impressora. Os comandos de saída mais utilizados na linguagem C/C++ são cout e printf. Exemplos: Mostra na tela o valor armazenado na variável X. cout << X; Mostra a mensagem “Conteúdo de X = “ e em seguida o valor armazenado em X. cout << “Conteúdo de X = ” << X; Mostra o número real aramazenado na variável X, utilizando cinco casas para parte inteira e duas casas decimais. printf(“%5.2f” , X); Mostra a mensagem “Conteudo de Y = ” e em seguida o número inteiro armazenado na variável Y. Printf(“Conteudo de Y = %d”, Y) 14________________________________________ Algoritmos e Estrutura de Dados I COMENTÁRIOS EM C/C++ Comentários são textos que podem ser inseridos em programas com o objetivo de documentá-lo. Os comentários não são analisados pelo compilador. Os comentários podem ocupar uma ou varias linhas. Comentário de blocos são iniciados por /* e terminados por */ Ex: /* Este programa é para fazer soma de três números inteiros */ Para fazer comentários em uma única basta inicia-la por // Ex: //PROGRAMA CRIADO POR: Alexandre Márton OPERADORES E FUNÇÕES PREDEFINIDAS EM C/C++ Operações Matemáticas nome da função (argumento); O argumento é a informação que é dada à função para que ela possa ser efetuada adequadamente. Pode ser uma constante ou uma variável. Exemplos de Funções Matemáticas que utilizaremos: sin (x) - Função que calcula o seno da variável X sqrt (y) - Função que calcula a raiz quadrada de y int (z) - Função que retorna a parte inteira da variável z (que deve ser do tipo real) 15________________________________________ Algoritmos e Estrutura de Dados I a. Operadores Aritméticos + - (unários) pow (x,y) exponenciação de xy * multiplicação / divisão + - soma e subtração (binários) div divisão truncada (ou inteira) (ex: x div y) % resto da divisão inteira b. Operadores Relacionais < <= > >= = != (diferente) c. Operadores Lógicos ! (not) && (and) || (or) Podemos usar parênteses para alterar ordem de prioridade das operações. 6. TIPOS DE LINGUAGEM DE PROGRAMAÇÃO: COMPILADAS (instrução de máquina / código binário) O texto (ou código-fonte) do programa é lido por um programa chamado compilador, que cria um arquivo binário, executável diretamente pelo hardware da plataforma-alvo. Exemplos deste tipo de linguagem são C ou Fortran. Compilar é traduzir código legível por humanos (código fonte) para código legivel pela máquina. Neste sentido java é compilada. Tem um compilador , o javac. O codigo fonte é compilado em codigo máquina. A máquina é a JVM. • alto nível -> baixo nível • performance • tipo específico de computador/processador (somente nele funcionará). INTERPRETADA (código fonte texto/script) O texto ou código-fonte não é convertido em um arquivo executável. Eles são executados utilizando um outro programa, o interpretador, que lê o código-fonte e o interpreta diretamente, durante a sua execução. Exemplos de linguagem interpretada incluem o BASIC tradicional, vbscript (ASP), javascript, Perl e Python. Interpretar é executar sem gerar código nativo. • Código fonte • Interpretador • Portabilidade 16________________________________________ Algoritmos e Estrutura de Dados I HÍBRIDA A JVM (Java Virtual Machine) portável em cada máquina compila os em bytecodes. Outra JVM em outra maquina ou processador interpreta os bytecodes por meio de uma estratégia adaptativa, a máquina virtual detecta os "hot spots" - pontos de código de maior atividade - e compila esses bytecodes para código nativo. Isso é chamado de Just-In-Time compiling. É possível, no entanto, alterar o modo de funcionamento da máquina virtual. Ou seja, Java é uma linguagem híbrida compilada e interpretada por uma JVM (Java Virtual Machine) em cada máquina. 7. ESTRUTURA CONDICIONAL EM ALGORITMOS: Estrutura condicional simples se (condição) então inicio comando1 comando2 comando3 fim; fimse; O comando só será executado se a condição for verdadeira. Uma condição é uma comparação que possui dois valores possíveis, verdadeiro ou falso. Os comando 1,2 e 3 só serão executados se a condição for verdadeira. As palavras INÍCIO e FIM serãonecessárias apenas quando dois ou mais comandos forem executados. Estrutura condicional composta se (condição) então comando1 senão comando2; fimse; 17________________________________________ Algoritmos e Estrutura de Dados I Se a condição for verdadeira, será executado o comando1; caso contrário, se a condição for falsa, será executado o comando2. se (condição) então inicio comando1; comando2; fim; senão início comando3 comando4 fim; fimse; Se a condição for verdadeira, o comando1 e o comando2 serão executados; caso contrário, se a condição for falsa, o comando3 e o comando4 serão executados. ESTRUTURA CONDICIONAL EM C/C++: 1) Estrutura condicional simples if ( condição ) comando; O comando só será executado se a condição for verdadeira. Uma condição é uma comparação que possui dois valores possíveis: verdadeiro ou falso. if ( condição ) { comando1; comando2; comando3; } 18________________________________________ Algoritmos e Estrutura de Dados I Em C/C++, torna-se obrigatória a utilização de chaves quando houver mais de um comando a ser executado. Os comandos entre as chaves {} só serão executados se a condição for verdadeira. * Todas as condições devem estar entre parênteses. 2) Estrutura condicional composta if ( condição ) comando1; else comando2; Se a condição for verdadeira será executado o comando1; caso contrário , se a condição for falsa, será executado o comando2. if ( condição ) { comando1; comando2; } else { comando3; comando4; } Se a condição for verdadeira o bloco de comandos contendo comando1 e comando2 será executado, caso contrário se a condição for falsa, o bloco de comandos contendo comando3 e comando4 é que será executado. * Todas as condições devem estar entre parênteses. ESTRUTURA CONDICIONAL CASE: Em alguns programas existem comandos mutuamente exclusivos, isto é, se um comando for executado, os demais não o serão. Quando esse for o caso, um 19________________________________________ Algoritmos e Estrutura de Dados I comando seletivo é o mais indicado e esse comando seletivo em C/C++ tem a seguinte sintaxe: Switch (variável) { case valor1 : lista de comandos; break; case valor2: lista de comandos; break; default: lista de comandos; } O comando switch (variável) avalia o valor de uma variável para decidir qual case será executado. Cada case está associado a um possível valor da variável. O comando break deve ser utilizado para impedir que sejam executados os comandos definidos nos cases subseqüentes. Quando o valor da variável não coincidir com aqueles especificados nos cases, será executado então o default. OPERADORES LÓGICOS: Os operadores lógicos são: &&, || e ! significam e , ou , não e são usados para conjunção, disjunção e negação , respectivamente. Tabela Verdade TABELA E TABELA OU TABELA NÃO V e V = V V ou V = V NÃO V = F V e F = F V ou F = V NÃO F = V F e V = F F ou V = V F e F = F F ou F = F Quando existe mais de uma condição , essas devem estar entre parênteses assim como todas as condições. Ex: If ( (X > 5) && ( X < 10 ) ) cout << “Número entre 5 e 10” ; 20________________________________________ Algoritmos e Estrutura de Dados I Exercícios 1) Tendo as variáveis salario, ir, salLiq, e considerando os valores abaixo. Informe se as expressões são verdadeiras ou falsas. salario ir salLiq expressão V ou F 100.00 0.00 100.00 salLiq >=100.00 200.00 10.00 190.00 salLiq < 190.00 300.00 15.00 285.00 salLiq = salario - ir 2) Sabendo que A=3, B=7 e C=4, informe se as expressões abaixo são verdadeiras ou falsas: a) (A+C) > B ( ) b) B >= (A + 2) ( ) c) C = (B –A) ( ) d) (B + A) <= C ( ) e) (C+A) > B ( ) 21________________________________________ Algoritmos e Estrutura de Dados I 1ª TRABALHO EM EQUIPE INSTRUÇÕES: � Entrega fora da data prevista terá penalidade de 1 ponto no primeiro dia de atraso e 0,5 pontos a cada dia consecutivo. � Máximo 5 integrantes, 5 será descontado 1 ponto por integrante excedente. � Entregar em folha A4. Pesquisar sobre os itens de 1 a 5. 1) Linguagem de programação: compilada e interpretada 2) Tipos de algoritmos 3) Conceito de variáveis e tipos de dados 4) Formação e exemplo de identificadores 5) Estrutura sequencial, declaração de variáveis, comando de atribuição, comando de entrada e saída. Resolva utilizando pseudocódigo: 6) Escreva um algoritmo para ler as notas da 1ª e 2ª avaliações de um aluno, calcular e mostrar a média das notas. 7) O custo de um carro novo ao consumidor é a soma do custo de fábrica com a porcentagem do distribuidor e dos impostos (aplicados ao custo de fábrica). Supondo que o percentual do distribuidor seja de 28% e os impostos de 45%, escreva um algoritmo para ler o custo de fábrica de um carro, calcular e escrever o custo final ao consumidor. 8) Faça um algoritmo para ler as seguintes informações do cliente: crédito e débito, calcular e escrever o saldo atual. 9) A equipe Ferrari (F-1) deseja calcular o número mínimo de litros que deverá colocar no tanque de seu carro para que ele possa percorrer um determinado número de voltas até o primeiro reabastecimento. Escreva um algoritmo que leia o comprimento da pista (em metros), o número total de voltas a serem percorridas no grande prêmio, o número de reabastecimentos desejados e o consumo de combustível do carro (em Km/L). Calcular e escrever o número mínimo de litros necessários para percorrer até o primeiro reabastecimento. OBS: Considere que o número de voltas entre os reabastecimentos é o mesmo 22________________________________________ Algoritmos e Estrutura de Dados I 10) Uma empresa deseja interligar alguns computadores, para isso deseja saber quantos switch’s comprar. Faça um algoritmo que leia o número de computadores a serem interligados e a quantidade de portas por switch, informe quantos switch’s deverão ser adquiridos. 11) Faça um algoritmo que leia um valor e escrever se é positivo, negativo ou zero. 12) Faça um algoritmo que tendo como dados de entrada a altura e o sexo (M ou F) de uma pessoa, calcule e mostre seu peso ideal, utilizando as seguintes fórmulas: o para sexo masculino: peso ideal = (72.7 * altura) – 58 o para sexo feminino: peso ideal = (62.1 * altura) - 44.7 13) Em uma escola, o aluno faz duas provas por período, com as notas variando de 0 a 10. Caso a média aritmética das duas notas seja maior ou igual a 6, ele passa de ano; senão, é reprovado. Faça um algoritmo que receba as duas notas de um aluno e escreva se ele passou ou não de ano 14) Dois carros percorreram diferentes distâncias em diferentes tempos. Sabendo que a velocidade média é a razão entre a distância percorrida e o tempo gasto para percorrê-la, faça um programa que leia as distâncias que cada carro percorreu e o tempo que cada um levou, e indique o carro que teve maior velocidade média. 15) A jornada de trabalho semanal de um funcionário é de 40 horas. O funcionário que trabalhar mais de 40 horas receberá hora extra, cujo cálculo é o valor da hora regular com um acréscimo de 50%Escreva um algoritmo que leia o número de horas trabalhadas em um mês, o salário por hora e escreva o salário totaldo funcionário, que deverá ser acrescido das horas extras, caso tenham sido trabalhadas. Considere que o mês possua 4 semanas exatas 16) Escreva um algoritmo que leia o salário fixo e o valor das vendas efetuadas pelo vendedor de uma empresa. Sabendo-se que ele recebe uma comissão de 3% sobre o total das vendas até R$ 1.500,00 mais 5% sobre o que ultrapassar este valor, calcular e escrever o seu salário total. 17) 23________________________________________ Algoritmos e Estrutura de Dados I Deseja se construir um pilar que suporte um peso p. O peso suportado é dado, hipoteticamente, por p = (500 a / h). Faça um algoritmo que leia os parâmetros da viga e informa o peso suportado: Critérios: 0,2 m <= a <= 0,6 m 1 m <= h <= 5 m Caso algum dos parâmetros informados esteja fora dos intervalos, informe uma mensagem de erro. 18) Menu de opções: Escreva um programa para ler 2 valores inteiros e uma das seguintes operações a serem executadas (codificada da seguinte forma: 1.Adição, 2.Subtração, 3.Divisão, 4.Multiplicação). Calcular e escrever o resultado dessa operação sobre os dois valores lidos. Observação: Considere que só serão lidos os valores 1, 2, 3 ou 4. 24________________________________________ Algoritmos e Estrutura de Dados I 8. ESTRUTURAS DE REPETIÇÃO • São aquelas que permitem executar mais de uma vez (repetir) um determinado trecho do algoritmo • O trecho do algoritmo em repetição é também chamado de laço (ou “loop”) • As repetições devem ser sempre finitas • Quanto a quantidade de repetições, os laços podem ser – Pré-determinados: Sabe-se antes a quantidade de execuções – Indeterminados: Não se conhece a quantidade de execuções • Quanto ao critério de parada, os laços podem utilizar – Variável de controle – Teste no início – Teste no final Repetição com Teste no Início Enquanto... faça • Laço que verifica antes de cada execução, se é “permitido” executar o trecho do algoritmo • Trata-se de um laço que se mantém repetindo enquanto uma dada condição permanecer verdadeira Pseudocódigo enquanto <condição> faça comando 1; comando 2; ... comando n; fimenquanto; Em C/C++ while (condição) { comando 1; comando 2; ... comando n; } 25________________________________________ Algoritmos e Estrutura de Dados I EXEMPLO: início //declaração de variáveis Real: N1, N2, N3, N4, MA; Inteiro: COM; CON 0; //inicialização do contador enquanto (CON < 50) faça //teste da condição de parada Leia (N1, N2, N3, N4); MA (N1 + N2 + N3 + N4) / 4; Escreva MA; se (MA >= 7) então Escreva (“Aluno Aprovado. Parabéns!”); senão Escreva (“Aluno Reprovado. Estude mais!”); fimse; CON CON + 1 {incremento do contador} fimenquanto; fim. Para... até... faça • Utilizada somente em casos nos quais o número de repetições da seqüência de instruções é previamente conhecido. • Laço simplificado para utilização em repetições de quantidade predeterminada • Incorpora internamente o funcionamento de um contador de repetições Em C/C++: for(i = 0; i < n; i++) { comando 1; comando 2; ... comando n; } Pseudocódigo: para i de <valor incial> até <valor final> passo p faça comando 1; comando 2; ... comando n; fimpara; 26________________________________________ Algoritmos e Estrutura de Dados I repita... até • Laço que verifica depois de cada execução, se é “permitido” continuar executando o trecho do algoritmo • Trata-se de um laço que se mantém repetindo até que uma dada condição se torne verdadeira Comparação entre Estruturas de Repetição • Aprendemos 3 maneiras de construir laços de repetição • É importante perceber que existem laços mais adequados ou convenientes para cada situação Estrutura Condição Quantidade de Execuções Condição de Existência Enquanto Início zero ou muitas Condição verdadeira Para Início zero ou muitas Condição verdadeira Repita Final ((vf – vi) div p) + 1 v <= vf Pseudocódigo repita comando 1 comando 2 ... comando n até (condição); Em C/C++ do { comando 1; comando 2; ... comando n; } while (condição); 27________________________________________ Algoritmos e Estrutura de Dados I 2ª TRABALHO EM EQUIPE INSTRUÇÕES: � Entrega fora da data prevista terá penalidade de 1 ponto no primeiro dia de atraso e 0,5 pontos a cada dia consecutivo. � Máximo 5 integrantes, 5 será descontado 1 ponto por integrante excedente. � Entregar em folha A4. 1) Escreva um algoritmo que leia três números e imprima o maior deles. 2) Escreva um algoritmo que leia três números e os imprima em ordem crescente. 3) Elabore um algoritmo que imprima os números pares de 2 a 20. 4) Imprima os 10 primeiros números pares a partir de um valor digitado pelo usuário. 5) Elabore um algoritmo que calcule a soma dos 15 primeiros números da série: 0, 3, 6, 9, 12, 15..... 6) Elabore um algoritmo que calcule a soma dos n primeiros números inteiros da série: 0, 3, 6, 9, 12, 15..... 7) Faça um algoritmo que leia a idade de uma pessoa, continue lendo até que a idade informada seja igual a 999. Mostre a mensagem: a) “Criança” caso a idade lida seja menor que 14. b) “Adolescente” caso a idade lida seja maior ou igual a 14 e menor que 18. c) “Adulto” caso a idade lida seja maior ou igual a 18. 8) Elabore um algoritmo que lê um número inteiro do teclado e exibe os resultados da multiplicação desse número por 1, 2, 3 ... 20. Utilize repetição com variável de controle (para...até...faça). 9) Faça um algoritmo que leia 100 números digitados pelo usuário e imprima o maior deles. 10) Faça um algoritmo que calcule o fatorial de um número n. 28________________________________________ Algoritmos e Estrutura de Dados I 11) Escreva um algoritmo que leia um numero e calcule o seu fatorial utilizando a estrutura de repetição enquanto. Reescreva o algoritmo utilizando a estrutura de repetição repita. Há diferença entre as duas estruturas? Explique. 12) A figura a seguir representa um leito de um rio na região urbana de uma cidade. Os círculos de 1 a 7 representam tanques de contenção, destinados a evitar enchentes. Faça um algoritmo que obtenha a capacidade de cada tanque e informe: a) O tanque com maior capacidade; b) O tanque com menor capacidade; c) A média de capacidade de todo o sistema; d) A capacidade total do sistema. 13) Faça um algoritmo que leia a nota de uma turma de 50 alunos e apresente a quantidade de alunos com notas entre [0, 3], ]3, 6], ]6, 8] e ]8, 10]. Considere que a nota informada esteja entre [0, 10]. 14) O salário de um pedreiro de alvenaria (reboco) é calculado conforme sua produção média diária, da seguinte maneira: a) Até 40 m² recebe R$ 9,80 por m²; b) Acima de 40 m² recebe R$ 10,00 por m². Faça um algoritmo em que leia o total de reboco produzido em 22 dias e calcule seu salário. Repita a operação para 150 funcionários e apresente o valor total da folha de pagamento. 15) Uma indústria de peças automotivas fez uma pesquisa de preços entre seus fornecedores para saber o valor de uma determinada chapa metálica para a manufatura de peças. Os fornecedores apresentaram seus preços, totalizando 20 ofertas. Faça um algoritmo que mostre ao diretor da indústria o menor e o maio preço, juntamente com o nome de seus respectivosfornecedores. 16) Mostre quais os resultados apresentados na tela gerados pelo seguinte pseudocódigo: 29________________________________________ Algoritmos e Estrutura de Dados I Programa XPTO; var i, j inteiro; início i 1 Enquanto (i <= 5) faça início Para j 0 até 9 passo 3 faça Escreva (i + j) fimenquanto; fim; 17) Mostre quais os resultados apresentados na tela gerados pelo seguinte pseudocódigo: Programa Mult; var cont, mult: inteiro; início mult 1; Para cont 3 até 15 passo 3 faça mult mult * cont; Escreva mult; fim; 18) Elabore um algoritmo que calcule o resultado da potência XY, onde X e Y serão valores inteiros fornecidos pelo usuário. A operação de potenciação não poderá ser usada, utilize somente operação de multiplicação. 19) Elabore um algoritmo que apresente os N primeiros termos da série de Fibonacci (aquela que aparece no livro e no filme “O Código da Vinci”). A série de Fibonacci é formada pela seqüência 1, 1, 2, 3, 5, 8, 13, 21... O elemento Ei da série é obtido pela soma dos elemento Ei-1 + Ei-2. 30________________________________________ Algoritmos e Estrutura de Dados I 9. ESTRUTURA HOMOGÊNEA DE DADOS (ARRAYS) Um array é um agregado homogêneo de dados, no qual, cada elemento é identificado unicamente pela posição que ocupa no agregado. A posição é iniciada no primeiro elemento do grupo. O tipo dos elementos que ocupam o array é previamente definido em tipos primitivos ou por referência (endereço de memória do elemento). Os ar Vetores (Array unidimensional) • Vetores são variáveis com múltiplas posições. • Podem ser vistos como lista de elementos do mesmo tipo. • Temos os seguintes tipos de dados básicos: inteiros, reais, lógicos e literais. • Para trabalhar com conjuntos de variáveis do mesmo tipo básico, usamos os conceitos de vetores. Declaração de um vetor <nome>[linha][coluna]: tipo; Exemplo: A[3][5]: inteiro; Problemas resolvidos utilizando vetores 1) Elabore um algoritmo que leia 10 números inteiros digitados pelo usuário e armazene-os em um vetor. Em seguida, o algoritmo deverá escrever na tela cada número digitado e o seu quadrado, sendo que esses valores (quadrados de cada número do vetor) deverão estar armazenados em outro vetor. início inteiro: i; //variável que indica a posição no vetor inteiro: Vetor1[10], Vetor2[10]; //vetores de 10 posições cada para i de 1 até 10 passo1 faça escreva (“Digite um número inteiro: “); leia Vetor1[i]; fimpara; para i ← 1 até 10 passo 1faça Vetor2[i] ← Vetor1[i] * Vetor1[i]; escreva (“O quadrado é: “, Vetor2[i]); 31________________________________________ Algoritmos e Estrutura de Dados I fimpara; fim; 2) Elabore um algoritmo que leia do teclado 20 números inteiros, armazene-os em um vetor e em seguida calcule e apresente a soma dos números ímpares digitados. inicio inteiro: i, A[20]; real: rest, soma; para i de 1 até 20 passo 1 faça escreva “Digite um número inteiro: “; leia A[i]; fimpara; para i de 1 até 20 passo 1 faça rest ← Resto(A[i] / 2); {resto recebe o resto da divisão inteira de A[posicao] por 2} Se (rest = 1) então {se o resto igual a 1, ou seja, se o número é ímpar} soma ← A[i] + soma; fimpara; Escreva (“A soma dos números ímpares é: “, soma); fim. 3) Leia do teclado 20 números inteiros, armazenando os valores em dois vetores (10 em cada vetor). Construa um terceiro vetor onde cada elemento é soma dos elementos de mesma posição nos dois primeiros vetores. Ao final, apresente os valores do terceiro vetor. início inteiro: Z[10], B[10], C[10], i; Para i de 1 até 10 passo 1 faça {preenche o primeiro vetor} Escreva (“Digite um número inteiro: “); Leia (A[i]); Escreva (“Digite um número inteiro: “); Leia (B[i]); Fimpara; Para i de 1 até 10 passo 1 faça {preenche o terceiro vetor} 32________________________________________ Algoritmos e Estrutura de Dados I C[i] ← A[i] + B[i]; //mostra os valores do terceiro vetor Para i de 1 até 10 passo 1 faça Escreva (“Somando A com B, temos: “, C[i]); Fim. 4) Leia do teclado um vetor de 15 números inteiros positivos. Em seguida, copie esses números para um segundo vetor de mesmo tamanho, alterando o sinal dos números que estiverem em posições pares. Ao final, mostre os valores do vetor resultante na tela. Programa Troca_Par; Var A[15], B[15], i, vlrNegativo: inteiro; Início Para i ← 1 até 15 faça {preenche o vetor A} Início Leia A[i]; B[i] A[i]; Se (Resto(i / 2) = 0) então {verifica se a posição é par 0} B[i] ← B[i] * -1; {troca o sinal do valor que está em B[i]} Fim; Para i ← 1 até 15 faça {Mostra o vetor B} Escreva B[i]; Fim; 5) Considerando o algoritmo abaixo: Programa Sequencia1; Var Vet1[10], i: inteiro; Início i ← 0; Enquanto (i < 10) faça Início Vet1[i] ← i * 4 – 3; i ← i + 1; Fim; Fim; 33________________________________________ Algoritmos e Estrutura de Dados I Indique o valor armazenado em: a) Vet1[1] R.: 1 b) Vet1[5] R.: 17 6) Considerando o algoritmo abaixo: inicio declare Vet1[20], Vet2[20], Vet3[20] numérico posicao numérico para posicao ← 0 até posicao < 20 faça inicio Vet1[posicao] ← posicao Vet2[posicao] ← 19 – posicao fim para posicao ← 0 até posicao < 20 faça Vet3[posicao] ← Vet1[posicao] + Vet2[posicao] fim. Indique o valor armazenado em: a) Vet3[1] R.: 19 b) Vet3[7] R.: 19 c) Vet3[20] R.: 19 Problemas resolvidos utilizando vetores em C Problema1: Ler 4 idades e guardar em vetor. 1ª Solução com while #include <cstdlib> #include <iostream> 34________________________________________ Algoritmos e Estrutura de Dados I using namespace std; int main(int argc, char *argv[]) { int idade[4]; //declaração do vetor idade com 4 posições int posicao; posicao = 0; while (posicao < 4) { cout << "Digite a idade "; //mostra na tela cin >> idade[posicao]; //posição posicao do vetor idade // recebe valor digitado posicao = posicao + 1; } system("PAUSE"); return EXIT_SUCCESS; } Problema2: Ler 4 idades, guardar em vetor e mostrar as idades armazenadas. 1ª Solução com while #include <cstdlib> #include <iostream> using namespace std; int main(int argc, char *argv[]) { int idade[4]; //declaração do vetor idade com 4 posições int posicao; posicao = 0; while (posicao < 4) { cout << "Digite a idade " << posicao << ":"; //mostra na tela cin >> idade[posicao]; //posição posicao do vetor idade // recebe valor digitado posicao = posicao + 1; } 35________________________________________ Algoritmos e Estrutura de Dados I posicao = 0; while (posicao < 4) { //mostra a idade armazenada no vetor idade cout << "Idade " << posicao << ": " << idade[posicao] << "\n"; posicao = posicao + 1; } system("PAUSE"); return EXIT_SUCCESS; } 2ª Solução com for #include <cstdlib> #include <iostream> using namespace std; int main(int argc,char *argv[]) { int idade[4]; //declaração do vetor idade com 4 posições int posicao; for(posicao = 0; posicao < 4; posicao++) { cout << "Digite a idade " << posicao << ":"; //mostra na tela cin >> idade[posicao]; //posição posicao do vetor idade // recebe valor digitado } for(posicao = 0; posicao < 4; posicao++) { //mostra a idade armazenada no vetor idade cout << "Idade " << posicao << ": " << idade[posicao] << "\n"; } system("PAUSE"); return EXIT_SUCCESS; } 36________________________________________ Algoritmos e Estrutura de Dados I 2ª Solução com do...while #include <cstdlib> #include <iostream> using namespace std; int main(int argc, char *argv[]) { int idade[4]; //declaração do vetor idade com 4 posições int posicao; posicao = 0; do { cout << "Digite a idade " << posicao << ":"; //mostra na tela cin >> idade[posicao]; //posição posicao do vetor idade // recebe valor digitado posicao = posicao + 1; }while (posicao < 4); posicao = 0; do { //mostra a idade armazenada no vetor idade cout << "Idade " << posicao << ": " << idade[posicao] << "\n"; posicao = posicao + 1; }while (posicao < 4); system("PAUSE"); return EXIT_SUCCESS; } Problema3: Ler a nota de 10 alunos e mostrar as notas digitadas. #include <cstdlib> #include <iostream> using namespace std; int main(int argc, char *argv[]) 37________________________________________ Algoritmos e Estrutura de Dados I { int Notas[10], cont; cont = 0; while (cont < 10) { //Escreve na tela pedindo a nota do aluno cout << "Digite a nota " << cont + 1 << " : "; cin>> Notas[cont]; //guarda no vetor Notas a nota digitada cont ++; //incrementa 1 em cont } cont = 0; while (cont < 10) { cout << Notas[cont] << " "; //Escreve na tela a nota do aluno cont++; } system("PAUSE"); return EXIT_SUCCESS; } Matriz (Array bidimensional) Uma matriz é uma variável composta homogênea bidimensional formada por uma seqüência de variáveis, todas do mesmo tipo, com o mesmo identificador e alocadas seqüencialmente na memória. Uma vez que as variáveis têm o mesmo nome, o que as distingue são índices que referenciam sua localização dentro da estrutura. A matriz é composta por linhas e colunas Declaração de matriz <nome>[linha, coluna]: tipo; Exemplo: A[3, 5]: inteiro; Atribuição de valores a uma matriz Para i 1 até 3 faça Início Para j 1 até 5 faça Leia A[i, ,j]; 38________________________________________ Algoritmos e Estrutura de Dados I Fim; Apresentar uma matriz Para i 1 até 3 faça Início Para j 1 até 5 faça Escreva A[i, j]; Fim; Exemplos resolvidos 1) Elabore um algoritmo que leia de 50 alunos a matrícula, 3 notas recebidas durante o curso. Após obter estas informações de cada aluno, calcule a nota final. Armazene todas estas informações em uma matriz. Solução: Inicio Declare linha, coluna Numérico //variáveis que indicam a posição na matriz Notas[50,5] Numérico //matriz 50 x 5, 50 linhas e 5 colunas Para linha ← 0 até linha < 50 faça Inicio posicao ← 0 Escreva “Digite a matrícula: “ Leia Notas[linha][posicao] Para posicao ← 1 até posicao < 4 faça Inicio Escreva “Digite a nota: “ Leia Notas[linha][ posicao] Fim Fim Para linha ← 0 até linha < 50 faça Inicio Para posicao ← 1 até posicao < 4 faça Notas[linha][4] ← Notas[linha][4] + Notas[linha][ posicao] Fim Fim. 39________________________________________ Algoritmos e Estrutura de Dados I 1) Elabore um algoritmo que carregue: i. Um vetor com oito códigos de lojas ii. Outro vetor com quatro posições com os códigos dos produtos iii. Uma matriz com os preços de todos os produtos em cada loja O algoritmo deve mostrar todas as relações (código produto – código loja) nas quais os preços não ultrapasse R$ 120,00. Solução: Programa Loja; Var lojas[8], produtos[4]: inteiro; pre[4,8]:real; posicao, linha, coluna: inteiro; Inicio Para posicao ← 0 até 8 faça Leia lojas[posicao] Para posicao ← 0 até 4 faça Leia produtos[posicao] Para linha ←0 até linha < 4 faça Inicio Para coluna ←0 até 8 faça Leia pre[linha, coluna] Fim; Para linha ← 0 até 4 faça Inicio Para coluna ← 0 até 8 faça Inicio Se (pre[linha, coluna] < 120) então Escreva produtos[linha], lojas[coluna] Fim; Fim; Fim; 40________________________________________ Algoritmos e Estrutura de Dados I 10. SUBPROGRAMA Subprogramas, também chamados de sub-rotinas, são blocos de instruções que realizam tarefas específicas. São utilizados frequentemente nas várias linguagens de programação para facilitar a construção dos programas, pois, uma ação executada várias vezes pode ser chamada através de uma sub-rotina. Características • Cada subprograma tem um único ponto de entrada • A unidade de programa chamadora é suspensa durante a execução do subprograma chamado, o que implica na execução de um único subprograma em cada momento. • Ao encerrar o subprograma, o controle retorna ao chamador. • Um subprograma pode ser executado quantas vezes for necessário. • Com sub-rotinas os programas tendem a ficar menores e mais organizados, uma vez que o problema pode ser subdividido em pequenas tarefas. Cabeçalho de um subprograma Subprograma <identificador>(var1:tipo, var2:tipo, ..., varn:tipo) Exemplo de algoritmo em pseudocódigo Programa Salário; Var sal, aum, novo_sal: real; início Leia sal; aum calculo(sal); novo_sal sal + aum; Escreva novo_sal; Fim; Subprograma calculo(sal: real) Var perc, valor: real; 41________________________________________ Algoritmos e Estrutura de Dados I Início Leia perc; valor sal * perc / 100; Retorne valor; Fim; Passagem de parâmetro por valor Passagem de parâmetro por valor significa que, para a execução da função, serão geradas cópias dos valores de cada um dos parâmetros. Passagem de parâmetro por referência Passagem de parâmetro por referência significa que os parâmetros passados para uma função correspondem ao endereço de memória ocupados pelas variáveis. 42________________________________________ Algoritmos e Estrutura de Dados I Exercícios Resolvidos 1. Faça uma função que retorne 1 (verdadeiro) se o número digitado for positivo ou 0 (falso) se o número for negativo. Programa Num_Positivo; Var num, x: inteiro; Início Leia num; x verifica(num); Se (x = 0) então Escreva “Numero positivo”; Senão Escreva “Numero negativo”; Fim; Subprograma Verifica(num: inteiro) Var res:inteiro; Início Se num >= 0 então res 1; Senão res 0; Retorne res; Fim; 2. Faça uma função que transforme e mostre segundos em hora, minutos e segundos. Todas as variáveis devem ser passadas como parâmetro, não havendo variáveis globais. Programa Trans_seg; Var seg: inteiro; Início Leia seg; transforma(seg);Fim; 43________________________________________ Algoritmos e Estrutura de Dados I Subprograma transforma(num: inteiro) Var h, m, s, r: inteiro; Início h num / 3600; r Resto(num / 3600); m r / 60; s Resto(r / 60); Escreva h, m, s; Fim; 3. Faça um procedimento que receba como parâmetro um valor inteiro que caracteriza o nível de um alarme, informe a gravidade conforme tabela aseguir: Nível Classificação 1 à 2 Informativo 3 à 4 Alerta de erro 5 à 6 Alarme de prioridade alta 7 à 8 Emergência Programa Alarme; Var nivel: inteiro; Início Leia nivel; Aviso(nivel); Fim; Subprograma Aviso(num: inteiro) Início Se ((nível >= 1) e (nível <= 2) então Escreva (“Aviso informativo: baixa prioridade”); Senão se ((nível >= 3) e (nível <= 4) então Escreva (“Aviso de erro: fique atento”); Senão se ((nível >= 5) e (nível <= 6) então Escreva (“Alarme de alta prioridade! Ação corretiva faz-se necessário”); Senão se ((nível >= 7) e (nível <= 8) então Escreva (“Alarme de emergência! Ação corretiva imediata”); Fim; 44________________________________________ Algoritmos e Estrutura de Dados I Exercício de Fixação 1) Foi realizada uma pesquisa de algumas características físicas de cinco habitantes de uma certa região. De cada habitante foram coletados os seguintes dados: sexo (F ou M), cor dos olhos (A – azuis ou C – castanhos), cor dos cabelos (L – louros, P – pretos ou C – castanhos) e idade. – Faça uma função que leia esses dados e armazene em uma matriz. Determine, por meio de outra função, a média de idade das pessoas com olhos castanhos e cabelos pretos. Mostre esse resultado no programa principal – Faça uma função que determine e devolva ao programa principal a maior idade entre os habitantes. – Faça uma função que determine e devolva ao programa principal a quantidade de indivíduos do sexo feminino cuja idade está entre 18 e 35 (inclusive) e que tenham olhos azuis e cabelos louros. 2) Resolva o fatorial de um número utilizando subprograma. Para isto, leia o valor no programa principal, calcule em uma sub-rotina e imprime o resultado no programa principal. 45________________________________________ Algoritmos e Estrutura de Dados I 3ª Trabalho em Equipe INSTRUÇÕES: � Entrega fora da data prevista terá penalidade de 1 ponto no primeiro dia de atraso e 0,5 pontos a cada dia consecutivo. � Máximo 5 integrantes, 5 será descontado 1 ponto por integrante excedente. � Entregar em folha A4. 1) Ler 5 números, armazenando-os no vetor X[5]. Calcular a soma destes 5 números e mostrá-la na tela. 2) Escreva um algoritmo que leia e mostre um vetor de 20 elementos inteiros. A seguir, conte quantos valores pares existem no vetor. 3) Escreva um algoritmo que leia dois vetores de 10 posições e faça a multiplicação dos elementos de mesmo índice, colocando o resultado em um terceiro vetor. Mostre o vetor resultante. 4) Escreva um algoritmo que leia um vetor de 10 elementos inteiros. Depois, encontre e mostre o menor elemento e sua posição no vetor. 5) Elabore um algoritmo e um programa em C para ler duas matrizes A e B, cada uma com 5 linhas e 3 colunas. Construir uma matriz C de mesma dimensão, que seja formada pela soma dos elementos da matriz A com os elementos da Matriz B. Apresentar os elementos da matriz C. 6) Elabore um algoritmo e um programa em C para ler uma matriz A de 10 linhas e 10 colunas. Apresentar o somatório dos elementos situados na diagonal principal (A[1,1], A[2,2], A[3,3]...A[10,10]) da matriz. 7) Escrever um algoritmo que lê uma matriz M(10x10) e a escreve. Troque, a seguir: a) linha 2 com a linha 8 b) a coluna 4 com a coluna 10 c) a diagonal principal com a diagonal secundária d) a linha 5 com a coluna 10 Escreva a matriz assim modificada. Obs : Diagonal principal e diagonal secundária 46________________________________________ Algoritmos e Estrutura de Dados I Principal Secundária X X X X X X X X 8) Elabore um algoritmo para ler 20 números inteiros e armazená-los em uma matriz 5 X 4. Em seguida armazenar em dois vetores (um de 5 elementos e um de 4) o somatório das linhas e das colunas da matriz. Ao final, mostrar a matriz digitada e as somas das linhas e colunas. 9) Uma empresa fez uma pesquisa de mercado para saber se as pessoas gostaram ou não de um novo produto lançado no mercado. Para isso forneceu o sexo do entrevistado (“M” ou “F”) e sua resposta (“S” ou “N”). Sabendo-se que foram entrevistadas 20 pessoas, elabore um algoritmo para calcular e informar: a) Número de pessoas que responderam “Sim”; b) Número de pessoas que responderam “Não”; c) Percentual de pessoas do sexo feminino que responderam “Sim”; d) Percentual de pessoas do sexo masculino que responderam “Não”; 10) Uma empresa de pesquisa deseja saber algumas informações sobre a renda média da população no estado de Minas Gerais, para isso, efetuou uma amostragem em 100 municípios. Cada cidade foi mapeada em 5 regiões, norte, sul, leste, oeste e centro. Deseja-se saber a renda média da população, a região com maior renda média, a com menor renda média e a diferença entre as duas. Para solução deste problema é necessário uma matriz e um vetor. 11) Uma empresa de construção civil têm 6 obras em diferentes locais. O custo de cada obra é calculado com base em cinco itens, enumerados da seguinte maneira: � Mão de obra; � Material; � Transporte, � Equipamentos; � Custo administrativo. Faça um algoritmo que armazene em uma matriz todas os dados referente a cada obra, informa o total gasto por obra, o custo por item em todas as obras e o custo total. 47________________________________________ Algoritmos e Estrutura de Dados I Dica: As linhas da matriz podem representar a obra e as colunas os itens 12) Considere um prédio residencial com 10 andares e 4 apartamentos por andar. Considere que cada apartamento possui um sensor de alarme que pode estar ativo (1) ou não (0). Com base nesta formulação, faça um algoritmo que preencha uma matriz, onde as linhas representam os andares e as colunas os apartamentos. Execute outro loop procurando se existe algum alarme ativo, caso encontre algum, informe o andar e o apartamento, sendo que o número do apartamento é obtido multiplicando o andar por 100, mais a posição do apartamento, ou seja: Num_apto = linha matriz * 100 + coluna matriz. 13) Coloque o exemplo anterior em um loop cíclico, executando assim uma varredura no sistema de alarme a todo momento. 14) Faça uma sub-rotina que receba três números inteiros como parâmetros, representando horas, minutos e segundos, e os converta em segundos. Exemplo: 2 h, 40 min e 10 s corresponde a 9.610 segundos. 15) Faça uma sub-rotina que receba um número inteiro positivo (n) como parâmetro, retorne a soma dos números inteiros existentes entre 1 e n (inclusive). 16) Faça uma sub-rotina que receba como parâmetro dois vetores de dez números reais, determine e mostre o conjunto (elementos) da intersecção entre eles. Os valores dos vetores devem ser informados pelo usuário no programa principal. Os valores que compõem a intersecção dos vetores, são aqueles que se encontram nos dois vetores. 17) Escreva um algoritmo que permita a leitura das notas de uma turma de 60 alunos, faça uma sub-rotina para calcular e escrever a média da turma e quantos alunos obtiveram nota acima desta média. 18) Escreva umprograma em C utilizando subprograma que efetue a conversão de temperatura em graus Celsius para Fahrenheit. 19) Escreva um algoritmo e um programa em C utilizando subprograma que calcule o fatorial de um número n qualquer. 20) Pesquise qual a vantagem em se utilizar subprogramas em algoritmos. 48________________________________________ Algoritmos e Estrutura de Dados I 21) Qual a diferença entre passagem de parâmetro por valor e passagem de parâmetro por referência? Caso seja necessário economizar o máximo de espaço possível, qual das duas você utilizaria? Explique o motivo. 22) Qual a diferença entre procedimento e função? REFERÊNCIA BIBLIOGRÁFICA ASCENCIO, A. F. G. e Campos, E. A. V., Fundamentos da Programação de Computadores: Algoritmos, Pascal, C/C++ e Java, 2ª edição, editora Pearson, 2008. CORMEM, Thomas H., et al; Algoritmos, Teoria e Prática, Elsevier, 4ª Tiragem, 2001. SEBESTA, Robert W.. Conceitos de Linguagens de Programação. 5 ed. Porto Alegre: Bookman, 2003. 638 p.
Compartilhar