Algoritmos e Linguagem de Programação

Tamanho: px
Começar a partir da página:

Download "Algoritmos e Linguagem de Programação"

Transcrição

1 Elisamara de Oliveira Algoritmos e Linguagem de Programação Revisada por Clausia Mara Antoneli (janeiro/2013)

2 APRESENTAÇÃO É com satisfação que a Unisa Digital oferece a você, aluno(a), esta apostila de Algoritmos e Linguagem de Programação, parte integrante de um conjunto de materiais de pesquisa voltado ao aprendizado dinâmico e autônomo que a educação a distância exige. O principal objetivo desta apostila é propiciar aos(às) alunos(as) uma apresentação do conteúdo básico da disciplina. A Unisa Digital oferece outras formas de solidificar seu aprendizado, por meio de recursos multidisciplinares, como chats, fóruns, aulas web, material de apoio e . Para enriquecer o seu aprendizado, você ainda pode contar com a Biblioteca Virtual: a Biblioteca Central da Unisa, juntamente às bibliotecas setoriais, que fornecem acervo digital e impresso, bem como acesso a redes de informação e documentação. Nesse contexto, os recursos disponíveis e necessários para apoiá-lo(a) no seu estudo são o suplemento que a Unisa Digital oferece, tornando seu aprendizado eficiente e prazeroso, concorrendo para uma formação completa, na qual o conteúdo aprendido influencia sua vida profissional e pessoal. A Unisa Digital é assim para você: Universidade a qualquer hora e em qualquer lugar! Unisa Digital

3 SUMÁRIO INTRODUÇÃO ALGORITMOS O que é um Algoritmo? Conceitos Básicos da Programação de Computadores Etapas da Programação de Computadores Expressão de Algoritmos Os Algoritmos serão Expressos em Pseudolinguagem Resumo do Capítulo Atividade Proposta PSEUDOLINGUAGEM DE PROGRAMAÇÃO: PORTUCÊ Identificadores Tipos Básicos e Declaração de Variáveis Comando de Atribuição Operadores Aritméticos Operadores Lógicos Operadores Relacionais Comando Condicional Comando de Repetição Comandos de Entrada e Saída Separador de Comandos Comentários Bloco de Programa Resumo do Capítulo CONSTRUÇÃO DE ALGORITMOS EM PORTUCÊ: PRATICANDO OS COMANDOS E FAZENDO CÁLCULOS Declaração de Variáveis Comandos leia e imprima Comando Condicional se Bloco de Programa Operações Básicas com Números Operações com Operadores Lógicos e Relacionais Resumo do Capítulo Atividades Propostas METODOLOGIA PARA A CONSTRUÇÃO DE ALGORITMOS Os Passos da Metodologia Solução de Exercícios utilizando a Metodologia Resumo do Capítulo Atividades Propostas...58

4 5 A LINGUAGEM DE PROGRAMAÇÃO C Tipos Básicos e Declaração de Variáveis em C Operadores de Atribuição, Aritméticos, Relacionais e Lógicos (Binários) em C Comando Condicional em C (if) Comando de Seleção Múltipla em C (switch) Comando de Repetição em C (while) Comando de Repetição em C (for) Comandos de Leitura e Escrita em C Comentários em C Bloco de Programa em C Funções Úteis em C Tradução de PortuCê para a Linguagem C Resumo do Capítulo Atividades Propostas USANDO COMANDOS DE REPETIÇÃO EM C Comando de Repetição Entrada Indeterminada de Dados (uso de flags) Comando de Repetição Entrada de Dados Determinada Exemplo dos Minutos Telefônicos Exemplo do Preço Final de Automóveis Exemplo da Eleição Exemplo da Série Numérica Resumo do Capítulo Atividades Propostas OUTROS PROGRAMAS EM C PRÁTICA EM LABORATÓRIO Estudo Dirigido CONSIDERAÇÕES FINAIS RESPOSTAS COMENTADAS DAS ATIVIDADES PROPOSTAS REFERÊNCIAS...175

5 INTRODUÇÃO Esta apostila se refere à disciplina Algoritmos e Linguagem de Programação do curso de Engenharia de Produção, na modalidade a distância, da Unisa. O objetivo desta disciplina é capacitar você, caro(a) aluno(a), a fazer os primeiros programas de computador utilizando uma linguagem de programação. Escrever programas de computador é uma tarefa muito interessante, instigante e desafiadora! Vamos começar entendendo o que é um algoritmo, que é um roteiro com instruções sequenciais para se resolver um problema ou se realizar alguma tarefa. É como uma receita de bolo, que indica os ingredientes e as instruções para se fazer o bolo passo a passo. Usando essa analogia, os ingredientes seriam os dados, os passos seriam as instruções do programa e o forno para assar o bolo seria o computador! O universo dos computadores é muito simples, muito limitado, mas muito poderoso: tudo se baseia na base 2, que possui apenas 2 algarismos: 0 e 1. Esses dois dígitos binários, ou bits, formam a linguagem de máquina, que é a única linguagem que o computador digital entende. Mas nós vamos aprender a escrever as instruções dos nossos programas numa linguagem de programação chamada C, que é mais próxima da nossa linguagem de comunicação. Nós nos comunicamos em Português, certo? Então vamos começar a escrever nossos primeiros algoritmos em PortuCê, uma pseudolinguagem, e depois traduzi- -los para um programa em linguagem C. Isso ainda não resolve nosso problema: para que o computador possa executar nosso programa em C, ele precisa ser traduzido para linguagem de máquina! Mas isso será feito facilmente pelo compilador C, um programa que faz exatamente isso: traduz programas em C para instruções binárias (linguagem de máquina). Como você pode ver, será um belo desafio! Então, caro(a) aluno(a), afie seu raciocínio lógico e prepare-se para entrar num mundo em que a lógica será o carro-chefe! Não tema nada, pois tudo será ensinado de forma simples e didática... Mais algumas páginas à frente e você já estará programando seu computador! Profa. Dra. Elisamara de Oliveira 5

6 1 ALGORITMOS Em nosso dia a dia, executamos mecanicamente uma série de ações, que são seguidas sequencialmente e que provocam o acontecimento de algo. Por exemplo, temos um trajeto frequente ao sairmos diariamente de casa em direção ao nosso trabalho ou à nossa universidade, que, sempre que seguido, nos leva ao nosso destino. Isso é um algoritmo. Em outras palavras, um algoritmo descreve eventos com duração finita, que envolvem um conjunto de objetos cujas características podem ser alteradas, através de ações que ocorrem sequencialmente. 1.1 O que é um Algoritmo? Vamos, juntos, entender o que são algoritmos, utilizando inicialmente alguns conceitos já definidos na literatura técnica da área: Atenção Programar é construir algoritmos. Programa = algoritmo + estruturas de dados. No processo de construção de programas, a formulação do algoritmo e a definição das estruturas de dados estão intimamente ligadas. Além dessas importantes definições, acrescentemos que, num algoritmo, podem-se observar os seguintes aspectos: ação: evento que ocorre num período de tempo finito; estado: propriedades de um objeto numa dada situação; processo: sequência temporal de ações; padrão de comportamento: toda vez que é seguido, um evento ocorre. 7

7 Elisamara de Oliveira Saiba mais Exemplo de um algoritmo Algoritmo para fazer batatas fritas para o jantar Traga a cesta com batatas da despensa ; Traga a panela do armário ; Coloque óleo na panela ; Se a roupa é clara então coloque o avental ; Enquanto nº de batatas é insuficiente para o número de pessoas faça descasque as batatas ; Pique as batatas ; Esquente o óleo da panela ; Frite as batatas na panela ; Escorra o excesso de óleo das batatas fritas ; Coloque as batatas fritas numa vasilha com papel absorvente. Apesar de muito simples, algumas observações importantes podem ser notadas nesse algoritmo: o tempo verbal está na forma imperativa ( faça, traga, frite etc.); há um sequenciamento das ações, que estão separadas por um ponto e vírgula; o avental não é usado toda vez: existe um motivo para colocá-lo, ou seja, há uma condição para que o avental seja colocado; o número de batatas descascadas varia; a ação de descascar uma batata repete-se até que a condição de parada (ser suficiente para alimentar as pessoas que irão jantar) seja alcançada; a ordem das ações é importante: primeiro descasca-se a batata, pica-se a batata, para depois fritá-la... Exemplos de algoritmos conhecidos: Qual é o algoritmo que você descreve para vir estudar? Qual é o algoritmo para se fazer uma feijoada? Qual é o algoritmo para se trocar uma lâmpada? Apesar de receitas culinárias e trajetos rotineiramente percorridos encaixarem-se perfeitamente no conceito inicial de algoritmo, no nosso curso, estamos interessados num tipo de algoritmo especial, que seja capaz de ser executado por um computador. Para tanto, é necessário que identifiquemos problemas do mundo real que possam ser traduzidos em ações primitivas finitas e dos quais se possa extrair um padrão de comportamento. 8

8 Algoritmos e Linguagem de Programação Com base nos exemplos apresentados até aqui, estamos prontos para definir o que é um algoritmo. Um algoritmo é a descrição de um padrão de comportamento, expresso em termos de um repertório bem definido e finito de ações primitivas que podem ser executadas. Analise a definição e veja como é coerente com o que apresentamos; não é mesmo? Além disso, é importante observar que, num algoritmo, distinguem-se claramente dois aspectos: aspecto estático: que corresponde ao texto; aspecto dinâmico: que corresponde à sua execução (a partir de valores iniciais). O curso de Algoritmos e Linguagem de Programação é, na realidade, um curso de Programação de Computadores para alunos(as) que iniciam cursos superiores na área de Engenharia e Informática. Sei que você está curioso(a) para conhecer um algoritmo, mas, para começar a construir seus algoritmos e fazer seus primeiros programas de computador, é necessário que você domine uma série de conceitos básicos, que são apresentados a seguir, a começar pelo próprio computador! 1.2 Conceitos Básicos da Programação de Computadores Fonte: -cuidar-do-seu-computador.html. Computador: é uma máquina capaz de seguir uma espécie de algoritmo chamado programa, que está escrito em linguagem de máquina. Linguagem de máquina: internamente, o computador executa uma série de instruções que ficam armazenadas em sua memória principal em código binário, ou seja, em linguagem de máquina (zeros (0) e uns (1), que são os dígitos binários ou bits). Linguagem de alto nível: para escrever os programas de computador, os programadores utilizam linguagens que estão mais próximas da linguagem humana, que são chamadas linguagens de alto nível ou, simplesmente, linguagens de programação. Exemplos de linguagens de programação (alto nível) são: C, C++, C#, Pascal, Delphi, Java, Basic, VisualBasic, Fortran, Cobol, entre muitas outras. 9

9 Elisamara de Oliveira Linguagem de montagem ou Assembly: há programas de computador que precisam interferir diretamente no hardware da máquina para permitir a execução de funções específicas, como as oferecidas por sistemas operacionais, por exemplo. Nesse caso, os programadores utilizam as linguagens de montagem ou linguagens assembly, que estão muito próximas da linguagem de máquina e mais distantes das linguagens de programação, sendo, por isso, chamadas linguagem de baixo nível. A Figura 1 mostra a relação entre as linguagens discutidas anteriormente. Figura 1 Relação entre linguagens de baixo e de alto nível. Numa ponta da Figura 1, está a linguagem de máquina e, no outro extremo, estão as linguagens humanas. Quanto mais próxima da linguagem de máquina, mais de baixo nível é a linguagem; em contrapartida, quanto mais próxima das linguagens humanas, mais alto nível. As linguagens de programação fazem uma espécie de ponte entre a linguagem binária, ou linguagem que o computador entende, e a linguagem que nós humanos utilizamos. Linguagem de programação: Uma linguagem de programação é uma linguagem utilizada por uma pessoa para expressar um processo através do qual o computador possa resolver um problema. (SEBESTA, 2000). Pessoas que possuem uma compreensão limitada da linguagem natural tendem a ser mais limitadas para expressar seus pensamentos, especialmente em termos de capacidade de abstração. Programadores que tiveram pouca educação formal em disciplinas de Computação tendem a continuar a usar a mesma linguagem de programação, mesmo que esta esteja em desuso. A aprendizagem contínua é fundamental. É necessário que os programadores conheçam os fundamentos das linguagens de programação para que possam ler, entender e aprender com os manuais e livros técnicos das novas linguagens e os novos paradigmas que venham a surgir. Compilador: permite que os programadores utilizem linguagens de alto nível para escrever os programas de computador, pois se encarrega de traduzi-los para linguagem de máquina. O compilador é um programa que traduz uma determinada linguagem de programação para linguagem de máquina. Dessa forma, existem diversos compiladores específicos para cada uma das linguagens de programação e para cada sistema operacional, conforme ilustra a Figura 2. 10

10 Algoritmos e Linguagem de Programação Figura 2 Os compiladores são específicos para cada linguagem e para cada sistema operacional. Conforme ilustra a Figura 2, um compilador C para o sistema operacional Windows (compilador X) é diferente de um compilador C para o sistema operacional Linux (compilador Y), que também é diferente de um compilador C para o sistema operacional Mac OS (compilador Z), por exemplo, embora a linguagem de programação (C) seja a mesma (linguagem de alto nível). O compilador de linguagem de montagem ou linguagem assembly é chamado assembler. Caro(a) aluno(a), dadas essas explicações básicas, como unir todas essas informações para começarmos a programar? A Figura 3 vai nos ajudar, mostrando o ciclo completo da elaboração do algoritmo à execução de um programa de computador. Cada um dos componentes desse ciclo é explicado a seguir. Figura 3 Do algoritmo à execução de um programa de computador. 11

11 Elisamara de Oliveira Algoritmo: estrutura do programa; instruções que descrevem a lógica do programa; Editor de texto: permite que o código-fonte do programa seja editado em um arquivo-fonte. Alguns compiladores têm editores com ambiente de programação integrados, como é o caso do compilador Dev C++; Código-fonte: conjunto de comandos escritos na linguagem de programação escolhida (que, neste curso, será a linguagem C). O código-fonte fica armazenado no arquivo-fonte em formato ASCii, ou seja, em texto [o arquivo-fonte possui a extensão relativa à linguagem de programação usada, por exemplo,.pas (Pascal),.c (C),.cpp (C++),.cs (C#),.java (Java)]; Compilador: lê o código-fonte do programa e cria outro arquivo, com o mesmo programa escrito em linguagem de máquina; Código-objeto: arquivo resultante da compilação do código-fonte. Contém informações sobre alocação de memória, os símbolos do programa (como nomes de variáveis e de funções) e também informações sobre debug (o arquivo-objeto possui a extensão.obj para a maioria das linguagens de programação); Arquivos de biblioteca: contêm funções já compiladas que podem ser utilizadas no programa; Linker: programa auxiliar do compilador que cria o programa executável a partir de arquivos- -objeto e dos arquivos de biblioteca; Código executável: programa que pode ser executado no computador (o arquivo executável possui a extensão.exe). Resumindo todo esse processo, caro(a) aluno(a), vamos precisar passar por 5 etapas: obter um problema a ser resolvido; escrever um algoritmo em pseudolinguagem para solucionar esse problema; traduzir o algoritmo para a linguagem de programação C; e, finalmente, editar esse programa e usar um compilador C para testar seu funcionamento! 1.3 Etapas da Programação de Computadores Como acabamos de dizer, para conseguirmos construir programas de computador, é necessário cumprir 5 etapas básicas da programação. As 5 etapas da programação de computadores são: 1. identificação de um problema do mundo real; 2. confecção do algoritmo; 3. teste do algoritmo; 4. confecção do programa de computador; 5. execução do programa no computador. Para realizarmos esse ciclo de etapas com sucesso, quer dizer, para conseguirmos fazer programas de computador com qualidade e confiáveis, é muito importante a utilização de técnicas de programação, como a programação estruturada. A programação estruturada é uma metodologia de projeto e desenvolvimento que pretende: 12

12 facilitar a escrita; facilitar o entendimento; permitir a verificação; facilitar a alteração e a manutenção dos programas de computador. Algoritmos e Linguagem de Programação O principal objetivo da metodologia de programação estruturada é reduzir a complexidade dos problemas. Essa metodologia, quando utilizada, induz o programador a produzir programas: confiáveis; de fácil manutenção; flexíveis; documentados; legíveis. Sendo assim, caro(a) aluno(a), vamos aprender a programar da melhor maneira possível: utilizando as regras da programação estruturada! 1.4 Expressão de Algoritmos Os algoritmos podem ser expressos através de diagramas, de pseudolinguagens ou da própria linguagem de programação. Vamos examinar cada uma dessas três opções e, no final deste capítulo, vamos optar por uma delas, para que possamos começar a fazer nossos primeiros algoritmos! Expressão de Algoritmos Através de Diagramas A utilização de diagramas para a expressão de algoritmos foi bastante utilizada até a década de Diagramas de Chapin e fluxogramas foram os principais métodos utilizados então. Nos métodos baseados em diagramas, uma grande variedade de formas geométricas, como quadrados, retângulos, hexágonos, pentágonos etc., é utilizada para representar as instruções de leitura e impressão de dados, assim como os comandos condicionais, de repetição etc. Além disso, uma série de regras para a disposição dessas formas e/ou setas para representar o sequenciamento das instruções fazem parte desses métodos. Apesar de terem sido utilizados largamente pelas primeiras gerações de programadores, esses métodos apresentam uma série de inconveniências, tais como: o programador tem que memorizar todas as formas geométricas e conhecer as regras de inter-relacionamento entre elas; o programador perde um tempo considerável para fazer e refazer desenhos, tendo que possuir diversas réguas com os símbolos dos diagramas; para algoritmos muito grandes, os desenhos começam a ocupar muitas páginas, tornando im- 13

13 Elisamara de Oliveira praticável a visualização de toda a solução; a memorização de regras de expressão desvia a atenção do programador, que não tem apenas de se concentrar na lógica do problema, como seria desejável, mas tem as preocupações adicionais de elaborar desenhos e consultar regras e regras. Além de todos os inconvenientes citados, que de longe esgotam os seus problemas, os métodos baseados em diagramas se distanciam muito do alvo da programação, que é a expressão da lógica algorítmica na própria linguagem de programação! Além disso, esses métodos não são nem um pouco intuitivos. Veja a Figura 4 e tente descobrir o que o programa faz, sem muito esforço, se for possível: Figura 4 Algoritmo expresso através de um diagrama de Chapin. A Figura 5 mostra um exemplo de um algoritmo expresso através de um fluxograma. Observe a existência de diferentes formas geométricas para as diferentes instruções e o uso de setas para representar o fluxo dos dados. Você seria capaz de dizer o que esse algoritmo faz? Quais as variáveis que ele utiliza e de que tipo básico elas são? (Dica: esse algoritmo faz a mesma coisa que o expresso pelo diagrama de Chapin, da Figura 4). 14

14 Figura 5 Algoritmo expresso através de um fluxograma. Algoritmos e Linguagem de Programação Expressão de Algoritmos Através de Linguagem de Programação Expressar um algoritmo através de uma linguagem de programação é o objetivo, a meta do programador, com certeza, mas isso é feito quando o programador já adquiriu bastante experiência de programação, quer dizer, quando o programador já consegue programar diretamente da linguagem de programação. Os programadores iniciantes podem ter grandes dificuldades para aprender a programar se forem diretamente às instruções da linguagem de programação. Uma linguagem de programação permite, além da expressão do raciocínio algorítmico, a sua execução no computador (por causa do compilador, conforme já aprendemos). Embora as linguagens de programação sejam chamadas linguagens de alto nível, devido à sua proximidade com a linguagem humana, suas instruções vêm em inglês. O inglês é uma das diversas linguagens humanas, claro, mas pode oferecer certo desconforto aos estudantes, principalmente aos que falam português, como é o nosso caso. Existem diversas linguagens de programação. Cada uma pode ser mais adequada à resolução de problemas específicos e recebe alguns rótulos por isso, como linguagens para aplicações científicas, linguagens para desenvolvimento de software básico, linguagens para utilização intensiva de recursos 15

15 Elisamara de Oliveira gráficos, para manipulação de bancos de dados etc. e linguagens para o ensino de programação! Veja a Figura 6. É um código escrito em Pascal. Figura 6 Algoritmo expresso na linguagem de programação Pascal. A Figura 6 mostra um algoritmo expresso na linguagem de programação Pascal, ou seja, já é um programa de computador. Observe a estrutura do programa: começa com PROGRAM, depois tem a seção VAR, na qual as variáveis são declaradas e, depois, vêm as instruções contidas entre o BEGIN (início) e o END (fim). Você seria capaz de dizer o que esse algoritmo faz? Quais as variáveis que ele utiliza e de que tipo básico elas são? (Dica: esse programa faz a mesma coisa que o expresso pelo diagrama de Chapin e pelo fluxograma, mostrados nas Figuras 4 e 5). Agora, observe o exemplo de um programa escrito na linguagem de programação C. Figura 7 Algoritmo expresso na linguagem de programação C. 16

16 Algoritmos e Linguagem de Programação A Figura 7 mostra um algoritmo expresso na linguagem de programação C, ou seja, também é um programa de computador. Observe a estrutura do programa: começa com um comentário, depois tem a inclusão de uma biblioteca de funções, depois a declaração das variáveis e, em seguida, vem a seção main, na qual as instruções do programa estão contidas entre o { (início) e o (fim). Você seria capaz de dizer o que esse algoritmo faz? Quais as variáveis que ele utiliza e de que tipo básico elas são? (Dica: esse programa faz a mesma coisa que o expresso pelo diagrama de Chapin, pelo fluxograma e pelo programa Pascal, mostrados nas Figuras 4, 5 e 6). O programa traz um comentário dizendo explicitamente o que ele faz. Portanto, garanto que você conseguiu responder à primeira pergunta. Com relação às variáveis que o programa utiliza e seu tipo básico, observe a declaração int valor, menor; no programa. Há duas variáveis ali declaradas: valor e menor; o tipo básico é int; um pouquinho de imaginação e int = inteiro! Que tal você comparar o código C com o código Pascal? Semelhanças? Qual dos dois lhe pareceu mais fácil de entender? Bem, se sua resposta foi o código Pascal, digo-lhe que o Pascal tem o rótulo de linguagem mais adequado ao ensino de programação. Se sua resposta foi o código C, saiba que é uma linguagem que foi criada para ser utilizada por programadores experientes. Mas, se você teve dificuldade de entender ambos os códigos, não se preocupe! O curso está apenas começando e há muito que se aprender de lógica de programação! Garanto que no final do curso esse programa vai parecer muito, muito fácil para você! Expressão de Algoritmos Através de Pseudolinguagem Uma pseudolinguagem é uma notação para expressão de algoritmos para ser utilizada nas 3 primeiras etapas da programação definidas na seção 1.3, quais sejam, identificação de um problema do mundo real, confecção e teste do algoritmo. É apresentada na forma de português estruturado. Embora seja uma pseudolinguagem, possui estrutura, sintaxe e semântica semelhantes às de uma linguagem de programação. A principal diferença entre a pseudolinguagem e a linguagem de programação é que a primeira não possui um compilador. Isso significa que é possível expressar o raciocínio algorítmico utilizando-se uma pseudolinguagem, mas o programa não pode ser executado no computador. São muitas as vantagens de se utilizar uma pseudolinguagem para escrever algoritmos: é uma linguagem independente de máquina; o programador pensa somente no problema a ser resolvido, sem se preocupar com possíveis restrições do compilador ou do hardware (computador); o programador tem que conhecer a sintaxe, a semântica e a estrutura da pseudolinguagem, mas tem total liberdade para criar novos comandos ou usar instruções em alto nível (ou em forma de frases); por um lado, ele vai se acostumando com a rigidez da sintaxe das linguagens de programação, mas, por outro, tem a liberdade de expressar seu raciocínio sem esbarrar em limitações de contexto; uma vez estando pronto o algoritmo na pseudolinguagem, a sua implementação no computador (etapas 4 e 5 da programação: confecção e execução do programa) fica muito facilitada, pois toda a lógica já foi desenvolvida e testada e somente uma tradução para a linguagem de programação-alvo se faz necessária. 17

17 Elisamara de Oliveira Veja o exemplo de um algoritmo escrito na pseudolinguagem PortuCê. Figura 8 Algoritmo expresso na pseudolinguagem PortuCê. A Figura 8 mostra um algoritmo expresso na pseudolinguagem PortuCê. Observe a estrutura do algoritmo: começa com um comentário dizendo o que o algoritmo faz, tem a declaração das variáveis e depois vem a seção principal ( ), em que são apresentadas as instruções contidas entre o { (início) e (fim) do algoritmo. Você seria capaz de dizer o que esse algoritmo faz? Quais as variáveis que ele utiliza e de que tipo básico elas são? (Dica: esse algoritmo faz a mesma coisa que o expresso pelo diagrama de Chapin, pelo fluxograma, pela linguagem Pascal e pela linguagem C, mostrados nas Figuras 4, 5, 6 e 7). Esse algoritmo em PortuCê corresponde ao programa em C mostrado na Figura 7. Observe a grande semelhança entre eles. Essa semelhança é proposital, com certeza. O PortuCê é quase a tradução de um programa C para o português. As vantagens de se utilizar o PortuCê são muitas. Pense sobre elas, pois o PortuCê será nosso maior aliado no aprendizado de algoritmos! Um exercício interessante para você fazer agora seria visitar os exemplos deste algoritmo escritos no diagrama de Chapin e no fluxograma e compará-los com o PortuCê. Diga-me: qual deles é mais fácil de entender? Qual dessas formas de expressão de algoritmos você escolheria? 1.5 Os Algoritmos serão Expressos em Pseudolinguagem Em função de tudo o que foi dito e após conhecermos as 3 formas de expressão de algoritmos, usaremos pseudolinguagem para escrever nossos primeiros algoritmos! As justificativas dessa nossa escolha são muitas e foram já fundamentadas. A pseudolinguagem PortuCê utiliza o português, numa forma estruturada, e tem estrutura, sintaxe e semântica muito semelhantes às da linguagem de programação C. Apesar de o Pascal ter se consagrado como uma linguagem adequada para o ensino da programação aos estudantes que a iniciam, ou seja, como primeira linguagem de programação, a linguagem C, antes restrita à comunidade científica, ganhou uma popularidade inquestionável na década de 1990 que se estende aos dias atuais, pois é a base de novas linguagens, como o Java, o C# e até o Android. Em função disso, a linguagem C passou a ser alvo do interesse dos estudantes. A resistência, que já existiu, 18

18 Algoritmos e Linguagem de Programação em utilizá-la como primeira linguagem de programação pelos professores se deveu, em parte, ao fato de seus criadores, Dennis Ritchie e Brian Kernighan, terem afirmado que C retém a filosofia básica de que os programadores sabem o que estão fazendo (KERNIGHAN; RITCHIE, 1989). Bem, se considerarmos que programadores iniciantes não têm condições de saber com segurança o que estão fazendo, exatamente pelo fato de serem inexperientes, a adoção da linguagem seria realmente questionável. No entanto, as linguagens de programação evoluíram bastante e as mais utilizadas hoje, como o Java e o C#, têm como base a linguagem C. Além disso, a adoção de um método adequado e coerente para o ensino da programação de computadores pode atuar como um facilitador do processo de aprendizagem, permitindo que uma linguagem mais complexa, como o C, possa ser ensinado sem oferecer obstáculos à aprendizagem. Assim, a adoção do PortuCê, nossa pseudolinguagem, e da metodologia de ensino proposta pela professora viabiliza a adoção da linguagem de programação C como primeira linguagem. Isso vai ao encontro das expectativas dos estudantes e coloca o ensino da programação na direção da atual tendência da programação de computadores, que vem utilizando, cada vez mais, o C como base dos novos e modernos paradigmas de programação. 1.6 Resumo do Capítulo Caro(a) aluno(a), o PortuCê, além de oferecer o conforto de utilizar nossa língua pátria, o que o torna muito familiar ao programador, não requer a memorização das abomináveis formas geométricas e setas e mais setas dos diagramas. Fique tranquilo, meu(minha) estudante, mais duas lições e você já estará fazendo seus primeiros programas de computador! 1.7 Atividade Proposta 1. Tente deduzir qual o padrão de comportamento utilizado para gerar as sequências: 1, 5, 9, 13, 17, 21, , 1, 2, 3, 5, 8, 13, 21,

19 2 PSEUDOLINGUAGEM DE PROGRAMAÇÃO: PORTUCÊ Caro(a) aluno(a), suponha que você ganhou de presente uma viagem para os Estados Unidos. O que você deveria fazer antes de ir para lá? Estudar inglês! Já que os americanos falam essa língua, claro. Então, neste nosso curso, você está ganhando a chance única de aprender a programar. Este capítulo o convida a aprender PortuCê, que é a língua que os algoritmos (que são as bases dos programas de computador) falam! O PortuCê é, basicamente, uma tradução da linguagem C para Português. Assim, aprendendo bem o PortuCê, você já estará se preparando para aprender a própria linguagem C, de forma simples e fácil! 2.1 Identificadores Todo programa de computador manipula dados, que são armazenados em variáveis. Uma variável precisa ter um nome que a identifique de forma única no programa: é o identificador. Atenção Um identificador em PortuCê é formado por caracteres alfanuméricos; O primeiro caractere tem que ser uma letra; os outros caracteres podem ser: letras: A-Z, a-z; dígitos: 0-9; sublinhado: _. Não pode haver dois identificadores iguais. Letras minúsculas e letras maiúsculas são diferentes. Os identificadores não podem ser acentuados. Não pode haver espaço em branco num identificador. O caractere ç não pode ser usado num identificador. Um identificador não pode ter o mesmo nome das palavras reservadas do PortuCê (como: principal, se, senão, inteiro, real etc.). Exemplos de identificadores válidos: NOME, raiz1, letra4, Total_dos_Salarios, Nome_de_Familia. 21

20 Elisamara de Oliveira Exemplos de identificadores INVÁLIDOS: 4pontos CUSTO FINAL PreçoTotal Pessoa+Alta Preco-caro Total_dos_salários inteiro (começa com número) (tem espaço em branco) (caractere ç não pode ser usado) (caractere + não pode ser usado) (caractere - não permitido) (palavra acentuada) (palavra reservada do PortuCê) 2.2 Tipos Básicos e Declaração de Variáveis Os dados manipulados por um programa são armazenados em variáveis. As variáveis precisam ter um nome (identificador), um tipo associado, e precisam ser declaradas antes que possam ser utilizadas. Saiba mais Há três tipos básicos que podem ser associados às variáveis: inteiro; real; caractere. Para declarar uma variável, escreve-se o nome de seu tipo, salta-se um espaço em branco, em seguida escreve-se o nome do seu identificador e ; para finalizar a declaração. Se mais de uma variável for do mesmo tipo básico, elas podem ser declaradas juntas, apenas separadas por vírgulas. Toda variável precisa ser declarada antes de ser utilizada. Não pode haver duas variáveis com mesmo nome, mesmo que tenham tipos básicos diferentes, a menos que algum caractere maiúsculo ou minúsculo as diferencie. Exemplos de declaração de variáveis válida: caractere NOME[20], letra; inteiro soma; real raiz1, Total_dos_Salarios; caractere Nome_de_familia[30]; Exemplos de declaração de variáveis INVÁLIDA: caractere NOME[20]; letra4; (o separador de identificadores deve ser a vírgula) inteiro: SOMA; (não pode haver o sinal de dois-pontos após o nome do tipo) raiz1, Total_dos_Salarios real; (o tipo básico deve vir antes dos identificadores) caractere Nome_de_Familia[30]; (o nome do tipo básico está errado) real SOMA; (a variável SOMA já foi declarada: um identificador não pode ser duplicado) 22

21 Algoritmos e Linguagem de Programação 2.3 Comando de Atribuição O conteúdo das variáveis do programa pode ser determinado através de dois tipos de comandos: comando de atribuição e comando de leitura. O comando de atribuição permite que um determinado valor seja armazenado numa variável. Atenção O símbolo do comando de atribuição é =. Não se deve atribuir a uma variável um valor que NÃO seja compatível com o tipo básico dessa variável, ou seja, números inteiros devem ser atribuídos a variáveis do tipo inteiro; números reais devem ser atribuídos a variáveis do tipo real; frases e letras devem ser atribuídas a variáveis do tipo caractere. Caso não haja compatibilidade entre o dado e o tipo da variável, podem acontecer efeitos indesejados. Então, muito cuidado, pois nesse tipo de atribuição ocorre a CONVERSÃO AUTOMÁTICA DE TIPOS e o que chega na variável de destino pode ser um desastre! Toda variável deve ter um valor a ela atribuído antes de ser usada no programa; Em variáveis reais, SÓ EXISTE PONTO DECIMAL; não se pode usar vírgula decimal. Exemplos de atribuições válidas: letra = L ; soma = 0; Total_dos_Salarios = ; NOME = Luiza ; Exemplos de atribuições INVÁLIDAS: NOME = Maria; (a cadeia de caracteres tem que estar entre aspas) NOME = Maria ; (o símbolo que delimita a cadeia de caracteres não pode ser apóstrofo, devem-se usar aspas) Total_dos_Salarios = ; (o valor a ser atribuído a uma variável numérica não pode estar entre apóstrofos nem entre aspas) Total_dos_Salarios = 1275,50; (não existe vírgula decimal, o certo é usar ponto decimal) soma = 10.0; (numa variável do tipo inteiro,como é o caso da variável soma, não pode haver parte decimal; esse caso está sujeito à conversão automática) soma := 0; (o símbolo do comando de atribuição é = e não :=) 23

22 Elisamara de Oliveira 2.4 Operadores Aritméticos Os operadores aritméticos permitem que expressões da Matemática sejam atribuídas às variáveis. Os operadores aritméticos implementam as operações básicas (adição, subtração, divisão e multiplicação) e algumas operações mais avançadas da Matemática (como logaritmo, raiz quadrada, seno, cosseno etc.). A variável que vai receber o resultado de uma operação aritmética tem que ser de um tipo numérico compatível, capaz de armazenar o valor resultante, senão poderá ocorrer uma conversão automática com resultados muitas vezes indesejados ou mesmo imprevisíveis. Saiba mais Os operadores aritméticos básicos são: + (adição); - (subtração); * (multiplicação); / (divisão real); ++ (adiciona 1); -- (subtrai 1). Alguns operadores aritméticos mais avançados são: % (resto da divisão inteira); / (quociente da divisão inteira); sqrt( ) (raiz quadrada); abs( ) (valor absoluto). Exemplos de expressões aritméticas válidas: resto = 10 % 3; quociente = 10 / 3; salario = ((totaldehoras*32.50) ) - descontoinss; valoremdolares = salario / 1.85; impostoderenda = salario * (0.20); nome = nome + da silva ; contador = contador +1; ++contador; --contador; raiz = sqrt(numero); 24

23 Algoritmos e Linguagem de Programação Exemplos de expressões aritméticas INVÁLIDAS: resto = 10.0 % 3; (o operador % só pode envolver números inteiros) valoremdolares = salario / 1,85; (não existe vírgula decimal, o separador é sempre o ponto decimal) salario = totaldehoras * ; (os operadores * e + são diádicos, envolvem sempre dois operadores, portanto não podem ser utilizados juntos) nome = nome * 3; (em variáveis do tipo caractere só pode ser feita adição ou subtração de caracteres) contador = *1; (o operador * é diádico, tem que envolver dois operandos) 2.5 Operadores Lógicos Os operadores lógicos permitem que os três principais operadores da Álgebra de Boole possam ser utilizados num programa: E, OU e NÃO. O estado dos operandos e o resultado de uma operação lógica são sempre FALSOS (avaliados como zero) ou VERDADEIROS (avaliados como diferentes de zero). Saiba mais Os operadores lógicos são: e (conjunção); ou (disjunção);! (negação). O operador binário e envolve sempre dois operandos e o resultado é VERDADEIRO somente quando ambos os operandos forem VERDADEIROS, ou seja, basta que um operando seja FALSO para que o resultado seja FALSO. O operador binário ou envolve sempre dois operandos e o resultado é FALSO somente quando ambos os operandos forem FALSOS, ou seja, basta que um operando seja VERDADEIRO para que o resultado seja VERDADEIRO. O operador unário! muda o estado do operando de FALSO para VERDADEIRO ou de VERDADEIRO para FALSO. Caro(a) aluno(a), aqui cabe uma explicação um pouco mais detalhada para melhorar o entendimento dos operadores lógicos E, OU e! (não): uma variável lógica é aquela que pode assumir apenas os valores VERDADEIRO ou FALSO; na prática, as variáveis lógicas são utilizadas para descrever o funcionamento de um sistema, como um circuito formado por uma bateria e uma lâmpada: 25

24 Elisamara de Oliveira a representação dos níveis lógicos (1=verdadeiro e 0=falso) pode ser melhor entendida através de chaves que representam um circuito. Se a chave está fechada (valor 1 ou valor VERDADEI- RO), a corrente pode passar, o que pode permitir que a lâmpada se acenda. Se a chave está aberta (valor 0 ou valor FALSO), a corrente não pode passar, o que pode impedir que a lâmpada se acenda; uma função E resulta em 1=VERDADEIRO se, e somente se, todas as variáveis lógicas de entrada tiverem valor 1=VERDADEIRO. Em outras palavras, a lâmpada do circuito só acende se ambas as chaves estiverem fechadas, o que caracteriza um circuito com chaves em sequência, como o mostrado a seguir (na função E, somente se ambas as entradas forem verdadeiras a expressão é avaliada como verdadeira); 26

25 Algoritmos e Linguagem de Programação uma função OU resulta em 1=VERDADEIRO se, pelo menos, uma das variáveis lógicas de entrada tiver valor 1=VERDADEIRO. Em outras palavras, a lâmpada acende se uma das chaves estiver fechada ou quando as duas estiverem fechadas (forem verdadeiras), o que caracteriza um circuito com chaves em paralelo, como o mostrado a seguir (na função OU, basta que uma entrada seja verdadeira para a expressão ser avaliada como verdadeira); uma função! (não) é uma operação de inversão. Ela converte o estado ou valor de uma variável lógica em seu inverso lógico: de VERDADEIRO para FALSO e de FALSO para VERDADEIRO. No caso do circuito, funciona assim: se a chave está aberta, ela se fecha e acende a luz, e, se está fechada, ela se abre e apaga a luz. Exemplos de expressões lógicas válidas: se (altura > 1.80 e idade < 21 e escolaridade >= 2) se (idade >= 13 e idade <=20) se ((media >= 7.0 e faltas <= 18) ou foidispensado == 1) se!( numero % 2 == 0) 27

26 Elisamara de Oliveira Exemplos de expressões lógicas INVÁLIDAS: se (altura > 1.80 e ou idade < 21) (os operadores e e ou são binários, envolvem sempre 2 operandos, portanto não podem ser utilizados juntos) se (idade >=13 e <= 20) (a variável idade deveria ser repetida para obter o resultado lógico da comparação) 2.6 Operadores Relacionais Os operadores relacionais permitem a comparação entre conteúdos de variáveis ou de valores e resultam sempre num resultado FALSO (avaliado como zero) ou VERDADEIRO (avaliado como diferente de zero). Saiba mais Os operadores relacionais são: > (maior que); >= (maior ou igual a); < (menor que); <= (menor ou igual a); == (igual a);!= (diferente de). Importante: o sinal = corresponde ao comando de atribuição e o sinal == significa comparação! Exemplos de expressões relacionais válidas: se (resposta == S ) se (resposta == S ou resposta == s ) se (resposta!= S e resposta!= s ) se (sexo == F e altura <= 1.50) Exemplos de expressões relacionais INVÁLIDAS: se (resposta! = S ) (o símbolo do operador diferente está errado: não pode haver espaço em branco entre o! e o = ) se (altura < = 1.50) (o símbolo do operador menor que está errado: não pode haver espaço em branco entre o < e o = ) 28

27 Algoritmos e Linguagem de Programação se (resposta = S ) (o problema aqui é o uso do símbolo =, que é do comando de atribuição, e não == que é a igualdade; na verdade, o comando não está errado, mas está sendo feita uma atribuição e não uma comparação. Portanto, muito cuidado!) 2.7 Comando Condicional O comando condicional permite que se tomem 2 caminhos diferentes e mutuamente exclusivos a partir da avaliação de uma condição. Se a condição é avaliada como verdadeira, um caminho é seguido; se é avaliada como falsa, outro caminho é escolhido, nunca ambos! A associação do comando condicional com fatos rotineiros é imediata: se estiver chovendo eu vou de carro, senão eu vou de bicicleta ; nesse exemplo, a pessoa avalia a condição do tempo antes de decidir se sairá de carro ou de bicicleta e não há possibilidade de ela sair com ambos os meios de transporte! Atenção A sintaxe do comando condicional é: se (<condição>) { <bloco de comandos 1> senão { <bloco de comandos 2> A semântica (como funciona) do comando condicional é: a <condição> é avaliada como VERDADEIRA (valor diferente de zero) ou FALSA (valor igual a zero); se a <condição> for VERDADEIRA, o <bloco de comandos 1> é executado e o comando condicional é finalizado; se a <condição> for FALSA, o <bloco de comandos 2> é executado e o comando condicional é finalizado. senão é cláusula do comando se, ou seja, não é comando, apenas faz parte do comando se. A cláusula senão pode não existir num comando se. Nesse caso, (quando não existe a cláusula senão ), quando a <condição> é avaliada como FALSA, nenhum comando é executado e o comando se é finalizado. Os delimitadores de início { e de fim são obrigatórios quando existe mais de um comando no <bloco de comandos 1> ou mais de um comando no <bloco de comandos 2>. Quando existir apenas um comando, os delimitadores ficam opcionais. 29

28 Elisamara de Oliveira Exemplos de comandos condicionais VÁLIDOS: se (media >= 7.0) aprovado = 1; se (media >= 7.0) { aprovado = 1; se (media >= 7.0) { aprovado = 1; ++contadoraprovados; se (media >= 7.0) aprovado = 1; senão aprovado = 0; se (media >= 7.0) { aprovado = 1; ++contadoraprovados; senão aprovado = 0; se (media >= 7.0 e faltas <= 9) { aprovado = 1; ++contadoraprovados; senão { aprovado = 0; ++contadorreprovados; Exemplos de comandos condicionais INVÁLIDOS: se media >= 7.0 aprovado = 1; (faltou colocar parênteses na condição) se (media >= 7.0) { aprovado = 1; ++contadoraprovados; (faltou colocar o delimitador de fim { no final do comando ) 30

29 Algoritmos e Linguagem de Programação se (media >= 7.0) aprovado = 1 senão aprovado = 0; (faltou ; depois do comando aprovado = 1) se (media >= 7.0) { aprovado = 1; ++contadoraprovados; senão aprovado = 0 (novamente faltou ; após o comando aprovado = 0) se (media >= 7.0 e faltas <= 9) { aprovado = 1; ++contadoraprovados; senão aprovado = 0; ++contadorreprovados; (faltou o delimitador { após o senão ) se (media >= 7.0) aprovado = 1; ++contadoraprovados; senão aprovado = 0 (faltaram os delimitadores { após a condição do comando se caso verdadeiro (antes do senão)) 2.8 Comando de Repetição O comando de repetição permite que um comando ou um bloco de comandos seja executado diversas vezes. O número de vezes é determinado por uma condição que é constantemente avaliada. Enquanto a condição for avaliada como verdadeira (ou diferente de zero), o comando ou bloco de comandos é executado repetidamente; quando a condição fica falsa, o comando de repetição para. A associação do comando de repetição com fatos rotineiros é possível: enquanto o número da casa for menor que o procurado, continue subindo a rua e verificando se é a casa procurada ; nesse exemplo, a pessoa avalia a condição, que é a verificação do número desejado entre diversas casas de uma rua, por exemplo. Essa avaliação continua até que a casa procurada seja encontrada ou que se encontre uma casa cujo número seja superior ao procurado, supondo que a numeração esteja em ordem crescente. 31

30 Elisamara de Oliveira Atenção A sintaxe do comando de repetição é: enquanto (condição) { <bloco de comandos> A semântica (como funciona) do comando de repetição é: a condição é avaliada como VERDADEIRA (diferente de zero) ou FALSA (igual a zero); se a condição for VERDADEIRA, o <bloco de comandos> é executado e, ao chegar ao delimitador de fim ou final do comando, automaticamente se retorna à avaliação da condição; se a condição for FALSA, o comando de repetição é finalizado. Entre os comandos do <bloco de comandos> é ESSENCIAL que exista um comando que altere a <condição> que é constantemente avaliada, pois, caso contrário, o comando enquanto NUNCA TERMINARÁ! Os delimitadores { e são obrigatórios quando existe mais de um comando no <bloco de comandos>. Quando existir apenas um comando, os delimitadores ficam opcionais e o ; funcionará como delimitador de fim, indicando o final do comando enquanto. Exemplos de comandos de repetição válidos: enquanto (contador < 3) ++contador; numero = 1; enquanto (numero <= 50) { se (numero % 2 == 0) ++contapar; senão ++contaimpar; ++numero; Exemplos de comandos de repetição INVÁLIDOS: enquanto contador <= 10 ++contador; (faltaram parênteses na condição) numero = 1; enquanto (numero <= 50) { se (numero % 2 == 0) ++contapar; senão ++contaimpar; ++numero; (faltou colocar o delimitador fim após o último comando) 32

31 Algoritmos e Linguagem de Programação numero = 1; enquanto (numero <= 50) se (numero % 2 == 0) ++contapar; senão ++contaimpar; ++numero; (como não existem os delimitadores de início e fim {, somente o comando se faz parte do comando enquanto e, como o comando se não altera a variável numero, o comando enquanto nunca vai parar!) numero = 1; enquanto (numero <= 50); { se (numero % 2 == 0) ++contapar; senão ++contaimpar; ++numero; (como foi colocado ; após a condição, o comando enquanto foi finalizado; a variável numero não será alterada e o comando enquanto nunca vai parar!) 2.9 Comandos de Entrada e Saída O comando de entrada permite que o usuário possa fornecer valores ao programa, através do teclado, que serão armazenados nas variáveis. O comando de saída permite que informações e valores de variáveis possam ser enviados ao usuário pela tela do monitor. É dessa forma que se consegue estabelecer um diálogo com o usuário. Se o programa deseja saber o nome do usuário, por exemplo, usa-se o comando de saída para fazer a pergunta qual é o seu nome? e usa-se o comando de entrada para obter a resposta e armazená-la numa variável. 33

32 Elisamara de Oliveira Atenção A sintaxe do comando de entrada é: leia( %letra, [&] variável); em que: %letra representa os especificadores de formato e depende do tipo associado à variável: %d ou %i %f %c %s para variáveis do tipo inteiro (integer); para variáveis do tipo real (float); para variáveis do tipo caractere (único) (character); para variáveis do tipo caractere (cadeia ou string); O símbolo & deve ser utilizado apenas para os tipos numéricos, ou seja, para variáveis declaradas como inteiras ou reais. A semântica (como funciona) do comando de entrada é: a variável tem que ter sido previamente declarada; o usuário vai utilizar o teclado para fornecer o dado e, depois que ele teclar <ENTER>, tudo o que ele tiver digitado será armazenado na variável automaticamente. Recomenda-se utilizar o comando leia para ler uma só <variável> de cada vez. A tabela a seguir mostra um exemplo de declaração de variáveis de tipos básicos e a forma correta de leitura. Declaração Leitura Exemplos de conteúdos inteiro numero; real valor; caractere ch; caractere nome[20]; leia( %i, &numero); leia( %f, &valor); leia( %c, ch); leia( %s, nome); numero = -5; numero = 2002; valor = ; valor = ; ch = 5 ; ch = s ; ch = # ; nome = Maria ; nome = fim ; Observe, na tabela, a diferença entre a declaração, a leitura e a atribuição de valores a um caractere único (%c) e a uma cadeia de caracteres (%s). Um único caractere vem entre apóstrofos ( ) e uma cadeia de caracteres entre aspas ( )! 34

33 Algoritmos e Linguagem de Programação Atenção A sintaxe do comando de saída é: imprima( frase e %letra [, lista de variáveis] ); Entre aspas, podem ser escritas frases formadas por palavras intercaladas pelos especificadores de formato %s, %c, %i, %d ou %f, descritos no comando leia. Para cada especificador utilizado, a variável do tipo correspondente deve constar da lista de variáveis. A lista de variáveis é opcional; deve existir somente quando um especificador de formato é colocado na frase entre aspas e, nesse caso, deve haver uma vírgula separando a frase da lista de variáveis e vírgulas separando as variáveis da lista. A semântica (como funciona) do comando de saída é: pode ser impressa qualquer frase e qualquer variável dentro de um comando imprima, desde que a frase esteja entre aspas e as variáveis estejam devidamente listadas após a vírgula que separa a frase da lista de variáveis; a frase entre aspas é copiada integralmente para a tela e os especificadores de formato são substituídos pelas variáveis da lista de variáveis; quando existe uma variável, o seu conteúdo é copiado para a tela; a ordem em que as palavras da frase e as variáveis aparecem no comando imprima é mantida quando é impressa na tela. Exemplos de comandos de entrada e saída válidos: imprima ( Qual é o seu nome? ); leia( %s,nome); imprima ( Qual é a sua idade? ); leia ( %i,&idade); imprima ( Qual é a sua altura? ); leia ( %f,&altura); imprima ( Qual é o seu sexo? (F/M) ); leia ( %c,sexo); imprima ( O seu nome é: %s e você tem %i anos,nome, idade); imprima ( Você foi aprovado no curso com média= %f, Media); Exemplos de comandos de entrada e saída INVÁLIDOS: imprima ( Qual é o seu nome? ); (faltaram aspas após a interrogação para delimitar a frase a ser impressa) 35

34 Elisamara de Oliveira imprima ( Qual é a sua idade? ); leia ( %i,idade); (faltou o & antes do identificador idade, pois o tipo é numérico: %i) imprima ( A sua idade é %i idade); (faltou uma vírgula entre a frase entre aspas e a variável idade) imprima ( Você foi aprovado no curso com média=, media); (faltou o especificador de formato da variável Media (%f) após o = na frase entre aspas) imprima ( Qual é o seu nome? ); leia ( %s,&nome); (não pode haver & na leituras de variáveis do tipo caractere (%c e %s) ) Saiba mais Explicação adicional Passo a passo do comando de impressão: imprima (frase variável1 variável2 variável3); (entre a frase e a variável e entre as variáveis deve haver uma vírgula separando-as). imprima (frase, variável1, variável2, variável3); (a frase deve vir entre aspas). imprima ( frase, variável1, variável2, variável3); (dentro da frase, deve vir um formato para cada variável, compatível com o seu tipo básico). imprima ( frase %s %i %f,variável1,variável2,variável3); Exemplo: imprima ( Vc se chama %s, tem %i anos e %f m de altura, nome, idade, altura); 36

35 Algoritmos e Linguagem de Programação 2.10 Separador de Comandos Todos os comandos do PortuCê são separados por ponto e vírgula. Atenção O separador de comandos é: ; Exemplos de erro na separação de comandos: se (resposta!= s ); { <comandos> (o ; depois da condição finaliza o comando se ) enquanto (contador < 5) ; { <comandos> (o ; depois da condição do comando enquanto coloca o programa em loop infinito!) 2.11 Comentários Os comentários não pertencem às instruções dos algoritmos, mas são úteis para que o programador explique o que está sendo feito. Saiba mais Os comentários podem vir delimitados entre /* */ Ou podem ser comentários de linha // Exemplos de comentários: /* Este trecho calcula a media de notas */ desc = preco*0.15; // calcula desconto de 15% 37

36 Elisamara de Oliveira 2.12 Bloco de Programa Bloco de programa é o nome que se dá à estrutura de um programa escrito numa determinada linguagem. O bloco de programa em PortuCê pode ser visto a seguir. Saiba mais O Bloco de Programa em PortuCê tem a forma: /* comentários */ <declaração de variáveis>; principal() { <bloco de comandos>; É desejável que todo algoritmo escrito em PortuCê comecer com um comentário dizendo o que o programa faz, embora comentários sejam opcionais. Em seguida, devem ser declaradas todas as variáveis que serão utilizadas no <bloco de comandos>. Após a declaração das variáveis, deve-se escrever a palavra principal( ), que delimita a seção em que os comandos podem ser utilizados. O <bloco de comandos> pode conter todos os comandos válidos em PortuCê, separados por ponto e vírgula, e estes devem estar contidos entre os delimitadores { e. Nenhum comando pode ser usado fora dessa seção. É importante notar que letras maiúsculas e minúsculas alteram os identificadores e as palavras reservadas do PortuCê. Exemplos de programas escritos em PortuCê válidos: /* sexo.c: le o nome e o sexo de uma pessoa e imprime uma frase dizendo se é masculino, feminino ou invalido */ caractere nome[20], sexo; principal ( ) { imprima ( Qual eh o seu nome? ); leia( %s,nome); imprima ( Qual eh o seu sexo? (f/m) ); leia ( %c,sexo); se (sexo == f ou sexo == F ) imprima ( %s voce eh do sexo feminino.,nome); senão se (sexo == m ou sexo == M ) imprima ( %s voce eh do sexo masculino.,nome); senão imprima ( Voce digitou um sexo invalido ); imprima( Fim do programa. ); 38

37 Algoritmos e Linguagem de Programação /* nota.c: le a nota de um aluno e verifica se ele foi aprovado ou reprovado */ real nota; principal() { imprima ( Digite sua nota final: ); leia( %f,&nota); se (nota >= 6.0) imprima ( Voce foi aprovado! ); senão imprima ( Voce foi reprovado. ); imprima( Fim do programa. ); /* idade.c: le o ano atual e o ano de nascimento de uma pessoa e imprime uma frase dizendo qual eh a idade da pessoa */ inteiro anoatual, anonasc, idade; principal() { imprima ( Qual eh o ano atual? ); leia( %i,&anoatual); imprima ( Qual eh o seu ano de nascimento? ); leia ( %i,&anonasc); idade = anoatual anonasc; imprima ( Voce fez ou fara %i anos, idade); imprima( Fim do programa. ); /* parimpar.c: le um numero e verifica se ele eh par ou impar */ inteiro n; principal() { imprima ( Digite um numero inteiro: ); leia( %i,&n); se (n % 2 == 0) imprima ( O numero %i eh par, n); senão imprima ( O numero %i eh impar, n); imprima( Fim do programa. ); 39

38 Elisamara de Oliveira Exemplos de programas escritos em PortuCê INVÁLIDOS: caractere sexo, caractere[20]; principal ( ) { imprima ( Qual eh o seu nome? ); leia( %s,caractere); imprima ( Qual eh o seu sexo? (F/M) ); leia ( %c,sexo); se (sexo == F ) imprima ( %s voce eh do sexo feminino.,caractere); senão imprima ( %s você eh do sexo masculino.,caractere); (a variável caractere tem o mesmo nome da palavra reservada caractere) real nota; { imprima ( Digite sua nota final: ); leia( %f,&nota); se (nota >= 6.0) imprima ( Voce foi aprovado! ); senão imprima ( Voce foi reprovado... ); imprima( Fim do programa. ); (faltou a palavra principal( ) para dar início à seção de comandos) real nota; nota = 7.5; principal() { imprima ( Digite sua nota final: ); leia( %f,&nota); se (nota >= 6.0) imprima ( Voce foi aprovado! ); senão imprima ( Voce foi reprovado... ); imprima( Fim do programa. ); (há um comando de atribuição nota=7.5; na seção de declaração de variáveis: não pode!) 40

39 Algoritmos e Linguagem de Programação inteiro anoatual, anonasc, idade; principal() imprima ( Qual eh o ano atual? ); leia( %i,&anoatual); imprima ( Qual eh o seu ano de nascimento? ); leia ( %i,&anonasc); idade = anoatual anonasc; imprima ( Voce fez ou fara %i anos, idade); imprima( Fim do programa. ); (faltou o delimitador { para iniciar a seção de comandos do programa) inteiro N; principal() { imprima ( Digite um numero inteiro: ); leia( %i,&n); se (n % 2 == 0) imprima ( O numero %i eh par, n); senão imprima ( O numero %i eh impar, n); imprima( Fim do programa. ); (não foi declarada a variável n ou foi declarada errada (N maiúsculo é diferente de n minúsculo)) 2.13 Resumo do Capítulo Caro(a) aluno(a), este capítulo foi um convite a aprender PortuCê, que é a língua que os algoritmos (que são as bases dos programas de computador) falam! O PortuCê é, basicamente, uma tradução da linguagem C para Português. Assim, aprendendo bem o PortuCê, você já estará se preparando para aprender a própria linguagem C, de forma simples e fácil! 41

40 3 CONSTRUÇÃO DE ALGORITMOS EM PORTUCÊ: PRATICANDO OS COMANDOS E FAZENDO CÁLCULOS 3.1 Declaração de Variáveis Comandos leia e imprima 1. Escreva um comando que leia um número inteiro. 2. Escreva comandos para pedir e ler um número inteiro. 3. Escreva comandos para pedir, ler e imprimir um número inteiro. 4. Repita o exercício 3 para um número real. Saiba mais Ao invés de usar %f para apresentar a altura, usamos %.2f O que isso significa? Que nós queremos apresentar a altura com apenas 2 dígitos na parte decimal! Afinal, a forma tradicional de se apresentar uma altura é com 2 dígitos apenas, como 1.75, 1.62, 1.88 etc., não é mesmo? 5. Declare as variáveis utilizadas nos exercícios de 1 a 4. 43

41 Elisamara de Oliveira 6. Escreva comandos para pedir, ler e imprimir o nome e a idade de uma pessoa. 3.2 Comando Condicional se 7. Escreva um comando para verificar se a idade lida no exercício 6 corresponde a um adulto (maior que 17 anos). Se for verdadeiro, imprimir uma frase dizendo que é um adulto. 8. Escreva um comando para verificar se a idade lida no exercício 6 corresponde a uma criança (menor que 13 anos). Se for, imprima uma frase dizendo que é uma criança. 9. Escreva um comando para verificar se a idade lida no exercício 6 corresponde a um adolescente (entre 13 e 17 anos). Se for, imprima uma frase dizendo que é um adolescente. 10. Escreva um único comando capaz de classificar uma pessoa pela faixa etária e ainda verificar se a idade é válida. 44

42 Algoritmos e Linguagem de Programação 3.3 Bloco de Programa 11. Transforme o exercício 6 num algoritmo, ou seja, construa o Bloco de Programa em PortuCê. 12. Escreva um algoritmo que leia o nome e a idade de uma pessoa e imprima uma frase dizendo se a pessoa é uma criança, um adolescente, um adulto ou se a idade é inválida. 45

43 Elisamara de Oliveira 3.4 Operações Básicas com Números 13. Escreva um comando para somar dois números: n1 e n2. Observe que soma é a variável na qual o resultado da adição de n1 com n2 será armazenado. São usados apenas o comando de atribuição = e o operador Escreva comandos para subtrair e multiplicar dois números: n1 e n2. O raciocínio para subtrair e multiplicar dois números é o mesmo usado na adição. 15. Escreva um comando para dividir dois números: n1 por n2. Antes de dividir um número n1 (numerador) por um número n2 (denominador) é necessário que verifiquemos se o denominador é diferente de zero, pois não existe divisão por zero! O comando divisao = n1 / n2; é válido do ponto de vista sintático, mas em programação temos que pensar nos erros que porventura possam ocorrer quando da execução dos comandos. Para evitarmos a divisão eventual por zero, usamos o comando se. Somente se n2 for diferente de zero é que a divisão será calculada; caso contrário, uma mensagem é impressa para comunicar ao usuário o motivo pelo qual o cálculo não foi efetuado. O resultado da divisão é um número real. 16. Escreva um comando para calcular o quadrado de um número inteiro n1 e também n1 elevado a 3. Com certeza, é muito mais fácil do que você pensava, não é? São pequenos truques da programação. Mas se quisermos calcular n1 elevado a 1000 ou n1 elevado a um número qualquer, teremos que escrever um pequeno trecho de algoritmo. Depois eu mostro como fazer. 46

44 17. Escreva um comando para calcular a raiz quadrada de um número n1. Algoritmos e Linguagem de Programação Novamente, para evitarmos um erro tentando calcular a raiz de um número negativo, usamos o comando se. Observe que sqrt( ) é um operador aritmético cuja sintaxe é diferente dos outros vistos nos exercícios anteriores. Esse tipo de operador, na verdade, é uma função que recebe n1 como parâmetro e devolve a sua raiz quadrada calculada. Existem muitas outras funções e elas serão apresentadas na medida em que se fizer necessária a sua utilização. 18. Escreva comandos para fornecer o quociente e o resto da divisão inteira de n1 por n2. No caso da divisão inteira de n1 (numerador) por um número n2 (denominador), também é necessário que o denominador seja diferente de zero. Nesse caso, é importante você notar que ambos os números (n1 e n2) têm que ser inteiros para que os operadores / (quociente da divisão) e % (resto da divisão inteira) possam ser utilizados! Como você pode notar, não existe um operador específico para o quociente da divisão inteira; usa- -se o / (que é da divisão real), mas, como n1 e n2 são inteiros, haverá uma conversão automática de tipos, com o truncamento da parte fracionária do resultado, o que nos fornece o quociente da divisão inteira. Isso é um trunfo do PortuCê: nunca se esqueça disso! Se n1 for 7 e n2 for 3, por exemplo, quais seriam os valores de quociente e resto? (7 dividido por 3 dá 2 (quociente) e sobra 1 (resto), não é?) Saiba mais Qual a diferença entre divisão real e divisão inteira? 3.5 este é o resultado da divisão real 7 / 2 = 3 (quociente da divisão inteira) 7 % 2 = 1 (resto da divisão inteira) 47

45 Elisamara de Oliveira 19. Escreva um comando para calcular 10% de um número. Em primeiro lugar, vamos esclarecer que NÃO EXISTE O OPERADOR porcentagem. Na verdade, % é o resto da divisão inteira. Portanto, o cálculo da porcentagem tem que ser feito pela operação equivalente: 10% = 10/100 = A variável porc deve ser do tipo real. Não recomendo o uso de 10/100, pois 10/100 pode ser zero, com a conversão automática de tipos. Então, use sempre 0.10 no cálculo de 10%. 20. Suponha que um produto custe um determinado preço, mas, se pago à vista, o cliente ganha 5% de desconto. Escreva comandos para calcular o valor do desconto e o valor final do produto. 21. Escreva comandos para separar os dígitos de um número inteiro menor que 100 em dezena e unidade. Vamos entender, primeiramente, o que se quer: dado um número menor que 100, por exemplo, 29, deseja-se obter o dígito 2 (dezena) separado do dígito 9 (unidade); no caso de um número de um só dígito, por exemplo, 3, o resultado seria 0 (dezena) e 3 (unidade). Bem, este é um problema muito comum na programação e muito fácil de ser resolvido também! Basta usar os operadores / e % com números inteiros. Vamos fazer um pequeno teste: 29 dividido por 10 dá 2 e sobra 9, certo? 2 é a dezena de 29 e coincide com o quociente da divisão inteira; 9 é a unidade de 29 e coincide com o resto da divisão inteira por 10! No caso de n1 ser igual a 3, ficaria assim: 3 dividido por 10 dá 0 e sobra 3. Nesse caso, 0 é a dezena ( / ) e 3 é a unidade ( % ). Um bom teste aqui seria você responder: como poderíamos separar os 3 dígitos de números entre 100 e 999? Se não conseguir resolver, esta é uma boa pergunta para o fórum! 48

46 Algoritmos e Linguagem de Programação 22. Suponha que, numa certa universidade, os alunos têm um número de 5 dígitos que os identificam. Desses 5 dígitos, os 2 primeiros indicam o ano em que o aluno entrou na universidade. Escreva comandos para separar os 2 primeiros dígitos de um número inteiro de 5 dígitos que representa a identificação do aluno. Vamos entender o que se quer: dado um número de 5 dígitos, por exemplo, 99211, se deseja obter os 2 primeiros dígitos, no caso, 99 (que indicaria que o aluno entrou em 1999 na universidade). Mas e se o aluno entrou em 2000 ou 2009? O resultado teria que ser ano de entrada = 0. Vamos fazer, agora, os testes. Vejamos: n1 é dividido por 1000 dá ZERO (que é o quociente) e sobra 211. Pode parecer estranho, mas pense: quando se divide um número por 1000, o menor resto é zero e o maior resto pode ser 999. Como queremos apenas o quociente da divisão inteira, o resultado será anoentrada = 0 (que, no caso, representaria 2000). Funciona! Outro teste: n1 igual a dividido por 1000 dá 10 e sobra 231, certo? 10 é o quociente, o que resulta em anoentrada= 10 (que seria 2010)! Funciona mesmo! Faça outros testes e verifique que dá certo. E como o cálculo é simples, não? 3.5 Operações com Operadores Lógicos e Relacionais 23. Escreva um comando para verificar se um número é positivo ou negativo. Observe que 0 pode ser considerado um número positivo e todo número menor que 0 é negativo. 24. Escreva um comando para verificar se um número é par ou ímpar. Um número par é aquele que, dividido por 2, tem resto zero: 0, 2, 4, 6, 8, 10..., e um número ímpar é aquele que, dividido por 2, tem resto diferente de zero: 1, 3, 5, 7,

47 Elisamara de Oliveira 25. Escreva um comando para verificar se um número é maior que Escreva um comando para verificar se um número está entre 10 e 100. Para se verificar se um número está entre dois limites, são necessárias duas comparações: uma para o limite inferior e outra para o limite superior, e essas comparações têm que estar ligadas pelo conectivo lógico e, quer dizer, somente quando as duas comparações forem verdadeiras, o número está dentro dos limites. Não é como na Matemática, que usamos uma expressão do tipo 10 n1 100! 27. Suponha que certo clube esportivo quer selecionar atletas para o time de basquete. As exigências são: ter 1.85 m de altura ou mais, ter menos de 21 anos e ter, pelo menos, o primeiro grau completo. Escreva um comando para verificar se um candidato pode ser ou não aprovado para o time de basquete. O grau de instrução é definido como: 0= sem instrução, 1=primeiro grau, 2=segundo grau, 3=superior. Observe que, ao se fazer a comparação da altura, não se faz referência à unidade de medida metros, quer dizer, estaria errada uma comparação do tipo altura >= 1.85 m. O mesmo acontece com a idade, em que os anos foram (e devem) ser omitidos. 50

48 Algoritmos e Linguagem de Programação 28. Suponha que o clube esportivo deseje, agora, formar um time masculino (sexo == m ) e outro feminino (sexo == f ) e tenha mudado um pouco seus critérios. As exigências passaram a ser: ter 1.85m de altura ou mais para os homens e 1.75 ou mais para as mulheres e ter menos de 21 anos. Escreva um comando para verificar se um candidato ou candidata pode ser ou não aprovado(a) para o time de basquete. Observe que surgiu o conectivo ou ligando as comparações de altura para os sexos diferentes, que continuaram a ser ligados pelo conectivo e na comparação de idade! Pense por que é assim. 3.6 Resumo do Capítulo Caro(a) aluno(a), este capítulo foi uma excelente oportunidade para exercitarmos a linguagem de programação. 3.7 Atividades Propostas Agora é hora de você praticar um pouco sozinho(a)! A minha forte recomendação é que você faça os exercícios sozinho(a), consultando os exemplos anteriores para ajudá-lo(a). Somente depois da sua tentativa, é que você deve conferir as respostas. Boa sorte! 1. Escreva um algoritmo que leia e imprima o nome e as duas notas de um aluno. 2. Escreva um comando que calcule a média das duas notas lidas no exercício Escreva um comando que verifique se a média calculada no exercício é maior ou igual a 7.0; se for, imprima uma frase dizendo que o aluno foi aprovado, caso contrário, imprima uma frase dizendo que foi reprovado. 4. Escreva um algoritmo que leia o nome e as duas notas de um aluno, calcule a média das notas e imprima uma frase dizendo se ele foi aprovado (média maior ou igual a 7.0) ou reprovado. 51

49 Elisamara de Oliveira 5. Considere o trecho de algoritmo em PortuCê: se (B1) C1; senão se (B2) se (B3) C2; C5; senão { C3; C4; Em PortuCê, não existe uma variável do tipo lógico a qual se possa atribuir um valor verdadeiro ou falso. No entanto, o PortuCê considera o valor 0 (zero) como sendo falso e qualquer outro valor diferente de zero como sendo verdadeiro. Nos exercícios que se seguem, considere que os valores de B1, B2 e B3 representam valores verdadeiros (diferentes de zero) ou falsos (iguais a zero) e responda à pergunta: quais comandos serão executados. a) Se B1= Verdadeiro B2 =Verdadeiro e B3=Falso? b) Se B1=Falso B2= Verdadeiro e B3= Falso? c) Se B1=Falso B2=Verdadeiro e B3=Verdadeiro? d) Quais os valores de B1, B2 e B3 para que somente o comando C5 seja executado? 6. Dado um conjunto de respostas sim ou não de várias pessoas e seu sexo (F=feminino, M=masculino), escreva comandos em PortuCê para calcular: a) o número de mulheres que responderam sim; b) o número de homens que responderam não; c) o número de mulheres e homens que responderam não. 52

50 Algoritmos e Linguagem de Programação 7. Observe o algoritmo a seguir. Qual o valor de L após a execução deste algoritmo? inteiro A, B, C; real X, Y; inteiro L; principal() { A = 0; /* falso */ B = 1; /* verdadeiro */ C = 0; /* falso */ X = 1.5; Y = 3.2; se (C ou (X+Y>5) ou não(a e B)) L = 0; senão L = 1; 8. Escreva trechos de algoritmo em PortuCê que ajudem o Instituto Brasileiro de Geografia e Estatística (IBGE) a fazer o censo populacional de uma certa cidade. Sabendo-se que os seguintes dados foram pedidos aos cidadãos: SEXO ( H = homem, M = mulher) e RENDA (número de salários-mínimos sm), os trechos de algoritmo devem fornecer: a) o total de homens; b) o total de mulheres; c) o total de pessoas da classe C (até 4 sm), da classe B (até 20 sm) e da classe A (acima de 20 sm). 9. Fornecidos os dados das candidatas a modelo: ALTURA, PESO e IDADE, escreva um trecho de algoritmo para verificar se os dados se enquadram nos seguintes limites: ALTURA: de 1.70 a 1.85 m PESO: de 48.0 a 60.0 kg IDADE: de 17 a 21 anos Se os dados da candidata corresponderem a esses limites, deve ser impressa uma frase dizendo que ela foi aprovada; caso contrário, que não foi aprovada. 10. Modifique o exercício anterior para que uma frase seja impressa após a verificação de cada quesito, dizendo se a candidata foi aprovada ou não em cada um deles e uma frase final dizendo se foi aprovada ou não como modelo. 53

51 4 METODOLOGIA PARA A CONSTRUÇÃO DE ALGORITMOS Neste capítulo, caro(a) aluno(a), você aprenderá uma metodologia que facilitará o processo de desenvolvimento de soluções algorítmicas para os problemas que serão propostos para você resolver. A metodologia é composta de uma sequência de passos, cujo principal objetivo é ajudá-lo(la) a resolver problemas dividindo-os por partes, diminuindo, assim, a sua complexidade. Como ficará bem claro logo adiante, resolvendo cada parte do problema por vez, consegue-se chegar a soluções completas e complexas a partir de soluções simples, que já foram, muitas vezes, encontradas para diversos outros problemas semelhantes. Você conhecerá os passos da metodologia e vários exemplos práticos serão fornecidos de maneira a familiarizá-lo(la) com o método. É importante ressaltar que a metodologia é um processo dinâmico. Você pode estar num passo mais adiante e identificar uma variável auxiliar e voltar aos passos anteriores e alterá-los, por exemplo. Portanto, não se detenha aos detalhes, pelo contrário, sinta-se livre para criar suas soluções. O método pretende ajudá-lo(la) e não engessá-lo(la)! Vamos em frente! 4.1 Os Passos da Metodologia Passo 1: Ler e entender o problema É importante ler e reler, pelo menos 3 vezes, o problema até que ele seja completamente compreendido. Não adianta querer buscar a solução de um problema que não esteja suficientemente esclarecido! Passo 2: Listar todos os dados de entrada do problema Um dado de entrada é aquele que será fornecido pelo usuário, ou seja, o dado que será lido pelo programa. Passo 3: Listar todos os dados de saída do problema Um dado de saída é algo que será produzido ou calculado pelo programa; tudo aquilo que deve ser apenas impresso não deve ser considerado um dado de saída. 55

52 Elisamara de Oliveira Passo 4: Listar todas as variáveis auxiliares do programa Uma variável auxiliar é identificada como aquela que é necessária para o cálculo de alguma variável de saída e não é variável de entrada. Por exemplo, num problema em que vários números serão lidos e sua média deve ser calculada, o número é uma variável de entrada e a média é uma variável de saída, mas como, para calcular a média, é necessário somar os números e dividir a soma pela quantidade de números lidos, a soma e a quantidade de números são variáveis auxiliares do programa. Assim, para identificar as variáveis auxiliares, basta analisar cada uma das saídas e verificar se, dadas as entradas, há necessidade de mais alguma variável para facilitar o seu cálculo. Passo 5: Declarar todas as variáveis do programa Cada dado de entrada, cada dado de saída e cada variável auxiliar geram uma variável. As variáveis do programa deverão ser uma para cada dado de entrada, uma para cada dado de saída e uma para cada variável auxiliar. É extremamente importante que o programador escolha nomes de variáveis significativos, que possam exprimir a função da variável. Por exemplo, uma variável que receberá a idade de uma pessoa não deveria se chamar x, nem mesmo i seria bom, o ideal seria idade. Passo 6: Inicializar as variáveis do programa Há um conjunto de pequenas regras que pode nos ajudar a encontrar os valores iniciais de cada variável do programa, apesar de que nem todas as variáveis precisam ter valores iniciais: toda variável de entrada é inicializada com o comando leia ; todo contador e todo somador devem ser inicializados com 0 ( zero); todo produto deve ser inicializado com 1 (um). Passo 7: Escrever o código para calcular cada uma das saídas do programa Os principais problemas a serem solucionados, na maior parte das vezes, resumem-se no cálculo das saídas do programa. Portanto, neste passo, cada uma das saídas deve ser analisada individualmente e sua solução encontrada separadamente. Passo 8: Imprimir os resultados do programa Aqui, só devem ser impressos os resultados pedidos na especificação do problema. Passo 9: Montar o algoritmo unindo os resultados dos passos 5 a 8 Os passos 5 a 8 têm a solução do problema. A montagem do algoritmo/programa pode seguir um esquema básico, mas vai depender muito da lógica de cada problema. Portanto, o esquema a seguir 56

53 Algoritmos e Linguagem de Programação serve apenas de orientação. Cada problema deve, no entanto, ser analisado logicamente para chegar ao seu algoritmo. Atenção /* Nome do Programa e o que ele faz */ <passo 5 declarar todas as variáveis do programa> principal() { <passo 6 inicializar as variáveis do programa > <passo 7 calcular cada uma das saídas do programa> <passo 8 imprimir os resultados do programa> imprima( Fim do programa ); Passo 10: Fazer o teste de mesa do programa a partir de diferentes valores iniciais O teste de mesa consiste na execução de todas as instruções do programa a partir de conjuntos de valores iniciais. Os valores iniciais devem ser escolhidos de maneira que as condições de contorno do problema sejam verificadas. Por exemplo, num programa que trabalhe com flags, deve ser testada a condição em que o valor do flag seja fornecido como dado inicial; num programa que só leia números positivos, devem ser fornecidos números negativos e zero; entre outras situações possíveis. 4.2 Solução de Exercícios utilizando a Metodologia A estratégia que utilizaremos nesta seção é propor uma lista de exercícios e resolver alguns deles usando a metodologia, deixando outros para que você, utilizando soluções semelhantes, resolva-os sozinho(a), ok? Então, vamos lá! 4.3 Resumo do Capítulo Neste capítulo, caro(a) aluno(a), você aprendeu uma metodologia que facilitará o processo de desenvolvimento de soluções algorítmicas para os problemas que serão propostos para você resolver. A metodologia é composta de uma sequência de passos, cujo principal objetivo é ajudá-lo a resolver problemas dividindo-os por partes, diminuindo, assim, a sua complexidade. Como ficará bem claro logo adiante, resolvendo cada parte do problema por vez, consegue-se chegar a soluções completas e complexas a partir de soluções simples que já foram, muitas vezes, encontradas para diversos outros problemas semelhantes. Você conhecerá os passos da metodologia e vários exemplos práticos serão fornecidos de maneira a familiarizá-lo com o método. 57

54 Elisamara de Oliveira 4.4 Atividades Propostas 1. Escreva um algoritmo em PortuCê para calcular e imprimir a área e o perímetro de uma sala retangular, sendo que os comprimentos das paredes (comprimento e largura) são fornecidos pelo usuário. 2. Escreva um algoritmo em PortuCê para calcular e imprimir a área de uma esfera. O raio da esfera será fornecido pelo usuário. Obs.: A = 3.14*R Escreva um algoritmo em PortuCê que calcule e imprima o valor em reais correspondente aos dólares que um turista possui no cofre do hotel. O programa deve solicitar os seguintes dados: quantidade de dólares guardada no cofre e cotação do dólar naquele dia. 4. Escreva um algoritmo em PortuCê que leia um número e informe se ele é par ou ímpar. 5. Escreva um algoritmo em PortuCê que leia 2 números e diga qual deles é o maior. 6. Escreva um algoritmo em PortuCê que calcule e imprima a quantidade de tijolos iguais necessária para construir uma determinada parede. São dados de entrada do programa: dimensões do tijolo (comprimento e largura) e dimensões da parede a ser construída (comprimento e largura). 7. Escreva um algoritmo em PortuCê que calcule S, o alcance de um projétil, dados a velocidade inicial v0 e o ângulo θ entre o cano do canhão e o solo. O valor de g corresponde à gravidade que é de 9.8 m/s 2. A fórmula a ser utilizada é: 8. Escreva um algoritmo em PortuCê que calcule a área A de um triângulo pela fórmula de Herão, lendo os valores de entrada s, que é o semiperímetro, e a, b e c, que são os lados do triângulo: 9. Escreva um algoritmo em PortuCê para calcular o valor do desconto, sendo que o preço do produto é fornecido pelo usuário e o desconto é de 5%. Apresentar o preço do produto, o valor do desconto e o preço final com o desconto. 58

55 Algoritmos e Linguagem de Programação 10. Escreva um algoritmo em PortuCê para calcular e imprimir qual foi a porcentagem de desconto dada em um determinado produto, sabendo-se o preço original do produto e o preço que foi cobrado por ele depois do desconto serão fornecidos pelo usuário. 11. Escreva um algoritmo em PortuCê que receba dois valores inteiros nas variáveis A e B. O programa deve trocar os valores entre as variáveis (ou seja, ao término do programa, a variável A deve ter o valor inicial de B e vice-versa). Apresentar as duas variáveis no final. 12. Escreva um algoritmo em PortuCê para calcular e imprimir o valor a ser pago pelo período de estacionamento do automóvel. O usuário entra com os seguintes dados: hora e minuto de entrada, hora e minuto de saída. Sabe-se que esse estacionamento cobra R$ 10,00 por hora ou fração. 13. Escreva um algoritmo em PortuCê que leia o valor de uma conta de luz e, caso o valor seja maior que R$ 50,00, apresente a mensagem: Você está gastando muito. Caso contrário, exiba a mensagem: Seu gasto foi normal, parabéns. 14. Escreva um algoritmo em PortuCê que receba a leitura do termômetro. Caso a temperatura esteja abaixo de 100 C, apresentar a mensagem de que a temperatura está muito baixa. Caso a temperatura esteja entre 100 e 200 C, apresentar a mensagem de que a temperatura está baixa. Caso a temperatura esteja acima de 200 C e inferior a 500 C, apresentar a mensagem de que a temperatura está normal. Caso contrário, apresentar a mensagem de que a temperatura está muito alta. 15. Escreva um algoritmo em PortuCê que leia o valor do salário atual, calcule e imprima o valor do novo salário de um funcionário. Considere que o funcionário deverá receber um reajuste de 15% caso seu salário seja menor que R$ Se o salário for maior ou igual a 500, mas menor ou igual a R$ , o reajuste deve ser de 10%. Caso o salário seja maior que R$ , o reajuste deve ser de 5%. 16. Escreva um algoritmo em PortuCê que determine quanto será gasto para encher o tanque de um carro, sabendo-se que o preço da gasolina é R$ 2.60 e o preço do álcool é R$ O usuário fornecerá os seguintes dados: tipo de carro (as opções como tipo de carro são a letra G gasolina ou a letra A álcool; rejeitar valores inválidos) e capacidade do tanque em litros. 59

56 5 A LINGUAGEM DE PROGRAMAÇÃO C Neste capítulo, você, caro(a) aluno(a), poderá começar a traduzir seus primeiros algoritmos para a linguagem de programação C. Isso o(a) capacitará a realizar as primeiras aulas práticas em laboratório. Recomenda-se que você prepare em seu computador um ambiente adequado à programação em C e comece a trabalhar sozinho(a), fazendo os programas da lista 4.1 como atividades extraclasse. O interessante em se utilizar o PortuCê como pseudolinguagem é que ele segue quase totalmente as mesmas regras da linguagem C. Assim, começar a programar em C será muito fácil, você verá! 5.1 Tipos Básicos e Declaração de Variáveis em C Saiba mais Um identificador em C é formado por caracteres alfanuméricos. O primeiro caractere tem que ser _ ou uma letra; os outros caracteres podem ser: letras: A-Z, a-z; dígitos: 0-9; sublinhado: _. Não pode haver dois identificadores iguais. Letras minúsculas e letras maiúsculas são diferentes. Os identificadores não podem ser acentuados. Não pode haver espaço em branco num identificador. O caractere ç não pode ser usado num identificador. Um identificador não pode ter o mesmo nome das palavras reservadas do C (como main, if, else, int, char). Na linguagem C, há 5 tipos básicos (int, float, double, char e void) e quatro modificadores de tipos (long, short, signed e unsigned), o que amplia muito os tipos de variáveis, mas, neste curso, usaremos apenas 3 tipos básicos: int; float; char. O tipo de dados double (%Lf ) corresponde ao float, mas com maior capacidade de armazenamento. Para se declarar uma variável, escreve-se o nome de seu tipo, salta-se um espaço em branco, em seguida o nome do seu identificador e ponto e vírgula para finalizar a declaração. Se mais de uma variável for do mesmo tipo básico, elas podem ser declaradas juntas, apenas separadas por vírgulas. Pode-se inicializar uma variável na sua declaração atribuindo-se a ela um valor inicial compatível com seu tipo. Toda variável precisa ser declarada antes de ser utilizada. Não pode haver duas variáveis com mesmo nome, mesmo que tenham tipos básicos diferentes, a menos que algum caractere maiúsculo ou minúsculo as diferencie. 61

57 Elisamara de Oliveira Exemplo de declaração de variáveis válida: char nome[20], letra, zero= 0 ; float soma=0; int n1, n2; float raiz1, Total_dos_Salarios; char nome_de_familia[30]= Menezes ; int idade, cont=0; 5.2 Operadores de Atribuição, Aritméticos, Relacionais e Lógicos (Binários) em C Atenção O operador de atribuição é: =. Há os operadores de atribuição compostos: += -= *= /= Os operadores aritméticos básicos são: + (adição); - (subtração); * (multiplicação); / (quociente da divisão real); ++ ( adiciona 1); -- (subtrai 1). Alguns operadores aritméticos mais avançados são: % (resto da divisão inteira); / (quociente da divisão inteira); sqrt( ) (raiz quadrada); abs( ) (valor absoluto). Os operadores relacionais são: > (maior que); >= (maior ou igual a); < (menor que); <= (menor ou igual a); == (igual a);!= (diferente de). Os operadores lógicos são: && (operador e conjunção); (operador ou disjunção);! (operador não negação). 62

58 Algoritmos e Linguagem de Programação Funcionamento dos operadores lógicos em C Operador lógico && (e) (ou)! (não) Ação Avalia como 1 (verdadeiro) se ambas as expressões forem verdadeiras, caso contrário, avalia como 0 (falso). Avalia como 1 (verdadeiro) se pelo menos uma expressão for verdadeira, caso contrário, avalia como 0 (falso). Avalia como 1 (verdadeiro) se a expressão for falsa e 0 (falso) se a expressão for verdadeira, ou seja, troca verdadeiro por falso e vice-versa. Expressões conectadas por operadores lógicos são avaliadas da esquerda para a direita, tão logo a veracidade ou falsidade do resultado for reconhecida. Saiba mais Na linguagem C, em qualquer expressão que se espere um valor lógico, o resultado será: falso se o valor for 0; verdadeiro para qualquer outro valor (1 ou qualquer número positivo ou negativo ou qualquer expressão válida da linguagem). Exemplos: (5 > 2) && (3!= 2) /* avalia como 1 (verdadeiro) */ (3 >= 2) (4 == 2) /* avalia como 1 (verdadeiro) */ (3 <= 2) (4==2) /* avalia como 0 (falso) */! (4==2) /* avalia como 1 (verdadeiro) */! (4>3) /* avalia como 0 (falso) */ Exemplos de expressões lógicas e relacionais válidas: if (altura > 1.80 && idade < 21 && escolaridade >= 2) if (idade >= 13 && idade <=20) if ((media >= 7.0 && faltas <= 18) foidispensado == 1) if!(numero % 2 == 0) if (resposta == S ) if (resposta == S resposta == s ) if (resposta!= S && resposta!= s ) if (sexo == F && altura <= 1.50) if (cont=0 && soma!=0) (muito cuidado com este tipo de expressão: cont=0 é uma atribuição e não uma comparação, mas em C pode-se fazer atribuição num comando if!) 63

59 Elisamara de Oliveira Exemplos de expressões lógicas e relacionais INVÁLIDAS: if (altura > 1.80 && idade < 21) (os operadores && e são binários, envolvem sempre 2 operandos, portanto não podem ser utilizados juntos) if (idade >=13 && <= 20) (o operando idade deveria ser repetido para se obter o resultado lógico da comparação) if (resposta! = S ) (o símbolo do operador diferente está errado: não pode haver espaço em branco entre o! e o = ) if (altura < = 1.50) (o símbolo do operador menor que está errado: não pode haver espaço em branco entre o < e o = ) resposta == S (faltaram parênteses delimitando a expressão) Exemplos de expressões aritméticas válidas: resto = 10 % 3; quociente = 10 / 3; salario = ((totaldehoras*32.50) ) - descontoinss; valoremdolares = salario / 2.55; impostoderenda = salario * 0.20; ok = (achou=1) && (resposta= s ); strcat (nome, da silva ); // concatenação de strings contador = contador +1; ++contador; contador += 2; // equivale a contador = contador + 2; --valor; valor -= 5; // equivale a valor = valor 5; Soma += Valor; // equivale a Soma = Soma + Valor; x1 = -b + sqrt(teta) / (2*A); // a função sqrt() está na biblioteca <math.h> 64

60 Algoritmos e Linguagem de Programação Exemplos de expressões aritméticas INVÁLIDAS: resto = 10.0 % 3; (o operador % só pode envolver números inteiros) salario = totaldehoras * ; (os operadores * e + são diádicos, envolvem sempre dois operadores, portanto não podem ser utilizados juntos) valoremdolares = salario / 2,55; (não existe vírgula decimal, o separador é sempre o ponto) Nome = Nome + da Silva ; (em variáveis do tipo string a manipulação é feita através de funções. As funções estão na biblioteca <string.h>) Contador = *1; (o operador * é diádico, tem que envolver dois operandos) 5.3 Comando Condicional em C (if) Atenção A sintaxe do comando condicional é: if (condição) { <bloco de comandos 1> else { <bloco de comandos 2> A semântica (como funciona) do comando condicional if é: a <condição> é avaliada como VERDADEIRA (valor diferente de zero) ou FALSA (valor igual a zero); se a <condição> for VERDADEIRA, o <bloco de comandos 1> é executado e o comando condicional é finalizado; se a <condição> for FALSA, o <bloco de comandos 2> é executado e o comando condicional é finalizado. else é cláusula do comando if, ou seja, não é comando, apenas faz parte do comando if. A cláusula else pode não existir num comando if. Nesse caso (não existe a cláusula else ), quando a <condição> é avaliada como FALSA, nenhum comando é executado e o comando if é finalizado. Os delimitadores de { e são obrigatórios quando existe mais de um comando no <bloco de comandos 1> ou mais de um comando no <bloco de comandos 2>. Quando existir apenas um comando, os delimitadores ficam opcionais. 65

61 Elisamara de Oliveira Exemplos de comandos condicionais válidos: if (media >= 7.0) aprovado = 1; if (media >= 7.0) { aprovado = 1; if (media >= 7.0) { aprovado = 1; ++contadoraprovados; if (media >= 7.0) { aprovado = 1; ++contadoraprovados; else aprovado = 0; if (media >= 7.0) aprovado = 1; else aprovado = 0; if (media >= 7.0 && faltas <= 9) { aprovado = 1; ++contadoraprovados; else { aprovado = 0; ++contadorreprovados; if (numero % 2 == 0) ++contapar; else ++contaimpar; if (numero > 0) printf( \nnumero positivo ); else if (numero < 0) printf( \nnumero negativo ); else printf( \nnumero zero ); 66

62 Algoritmos e Linguagem de Programação Exemplos de comandos condicionais INVÁLIDOS: if media >= 7.0 aprovado = 1; (faltou colocar parênteses na condição) if (media >= 7.0) { aprovado = 1; ++contadoraprovados; (faltou colocar o delimitador de fim { no final do comando ) if (media >= 7.0) aprovado = 1 else aprovado = 0; (faltou ; depois do comando aprovado = 1) if media >= 7.0 aprovado = 1; ++contadoraprovados; else { aprovado = 0; ++contadorreprovados; (faltou colocar parênteses na condição e delimitadores de início e fim { antes do else) if (numero % 2 == 0); ++contapar; else ++contaimpar; (não pode-se colocar ; depois da condição do comando if, pois o ; finaliza o comando) 67

63 Elisamara de Oliveira 5.4 Comando de Seleção Múltipla em C (switch) Atenção Comando de seleção múltipla que testa sucessivamente o valor de uma expressão contra uma lista de valores do tipo inteiro ou de caracteres. Quando o valor coincide, os comandos associados àquele valor são executados. A sintaxe do comando de seleção múltipla switch é: switch (expressão) { case valor1: <comandos_1>; break; case valor2: <comandos_2>; break;... case valorn: <comandos_n>; break; default: comandos_default; A expressão deve resultar num valor inteiro do tipo long, int ou char. Compara-se esse resultado com o valor1 até valorn: se for encontrada alguma equivalência, o programa passa a executar os comandos a partir deste ponto, até encontrar uma instrução break; se nenhuma equivalência for encontrada, os comandos relativos a default são executados; caso não haja a opção default, nenhum comando é executado; caso a instrução break não seja encontrada, todos os comandos vão sendo executados até se chegar ao final do comando switch. Exemplos de comandos de seleção múltipla válidos: switch (sexo) { case f : case F : printf( \nvoce eh do sexo feminino ); break; case m : case M : printf( \nvoce eh do sexo masculino ); break; default: printf( \nvalor de sexo invalido. ); 68

64 Algoritmos e Linguagem de Programação letra = toupper(letra); // toupper transforma o caractere para maiúsculo switch (letra) { case A : case E : case I : case O : case U : printf( \n Voce digitou uma vogal ); break; default: printf( \n Voce digitou algo diferente de uma vogal ); printf( \ndigite o numero do dia da semana (1-7): ); scanf( %i,&dia); switch(dia) { case 1: printf( \n1-domingo - Sunday ); break; case 2: printf( \n2-segunda-feira - Monday ); break; case 3: printf( \n3-terca-feira - Tuesday ); break; case 4: printf( \n4-quarta-feira - Wednesday ); break; case 5: printf( \n5-quinta-feira - Thursday ); break; case 6: printf( \n6-sexta-feira - Friday ); break; case 7: printf( \n7-sabado - Saturday ); break; default: printf( \ndia da semana invalido. ); // switch 69

65 Elisamara de Oliveira switch (voto) { case 1: printf( \n Voce votou no candidato 1 ); ++cont1; break; case 2: printf( \n Voce votou no candidato 2 ); ++cont2; break; case 3: printf( \n Voce votou no candidato 3 ); ++cont3; break; default: printf( \n Voto invalido ); Exemplos de comandos de seleção múltipla INVÁLIDOS ou ERRADOS: printf( \nqual eh a temperatura do seu corpo? ); scanf( %f,&temp); switch (temp) { case 36.0: case 36.5: printf( \nvoce não tem febre. Temperatura normal. ); break; case 37.0: case 37.5: printf( \nvoce esta levemente febril. ); break; default: if (temp > 37.5) printf( \nvoce esta febril. Procure um medico ); else printf( \nesta temperatura esta fora dos valores normais ); (o comando switch não aceita valores do tipo real!!! Este comando é totalmente inválido) switch (sexo) { case f : case F : printf( \nvoce eh do sexo feminino ); case m : case M : printf( \nvoce eh do sexo masculino ); default: printf( \nsexo invalido. ); (falta o comando break dentro dos cases, então todos os printf serão executados) 70

66 Algoritmos e Linguagem de Programação 5.5 Comando de Repetição em C (while) Atenção A sintaxe do comando de repetição while é: while (condição) { <bloco de comandos> A semântica (como funciona) do comando de repetição while é: a condição é avaliada como VERDADEIRA (diferente de zero) ou FALSA (igual a zero); se a condição for VERDADEIRA, o <bloco de comandos> é executado e, ao chegar ao delimitador de fim ou final do comando, automaticamente se retorna à avaliação da condição; se a condição for FALSA, o comando de repetição é finalizado. Entre os comandos do <bloco de comandos>, é ESSENCIAL que exista um comando que altere a <condição> que é constantemente avaliada, pois, caso contrário, o comando enquanto NUNCA TERMINARÁ! è Caso haja um comando break; dentro do comando while, este finaliza imediatamente o comando while quando for executado. Os delimitadores { e são obrigatórios quando existe mais de um comando no <bloco de comandos>. Quando existir apenas um comando, os delimitadores ficam opcionais e o ; funcionará como delimitador de fim, indicando o final do comando while. Exemplos de comandos de repetição válidos: contador=0; while (contador < 3) ++contador; numero = 1; while (numero <= 100) { if (numero % 2 == 0) ++contapar; else ++contaimpar; numero += 3; numero = 1; while (1) { if (numero % 2 == 0) ++contapar; else ++contaimpar; numero += 3; if (numero >= 100) break; 71

67 Elisamara de Oliveira Exemplos de comandos de repetição INVÁLIDOS ou errados: while contador <= 10 ++contador; (faltaram parênteses na condição) numero =1; while (numero <= 100) if (numero % 2 == 0) ++contapar; else ++contaimpar; numero += 3; (como não existem os delimitadores de início e fim { do comando, somente o comando if faz parte do comando while e, como o comando if não altera a variável numero, que controla a condição, o comando while nunca vai parar!) numero = 1; while (numero <= 10); { numero += 3; (como foi colocado ; após a condição, o comando while foi finalizado, a variável numero não será alterada e o comando while nunca vai parar!) numero = 1; while (1) numero += 3; if numero >= 10 break; (como não foram colocados { delimitando os comandos dentro do while, que foi colocado em loop infinito de propósito, o comando break não será executado e o comando while nunca vai parar mesmo!) 5.6 Comando de Repetição em C (for) O comando de repetição for permite que um comando ou um bloco de comandos seja executado um número determinado de vezes. É um comando de repetição, como os comandos while (já apresentado) e do while (que não apresentaremos nesta apostila). A diferença entre eles é que o comando for utiliza um mecanismo de contagem automática, dentro de um intervalo definido pelo usuário. É muito útil para controlar a leitura e a impressão de vetores e matrizes (estruturas que serão estudadas no futuro). 72

68 Algoritmos e Linguagem de Programação Atenção A sintaxe do comando de repetição for é: for (inicial; condição; incremento ou decremento) { <bloco de comandos> As expressões inicial e incremento ou decremento são, em geral, atribuições à variável de controle e condição é uma expressão relacional que envolve a mesma variável de controle. A semântica do comando for é: A expressão inicial é avaliada, consistindo geralmente na inicialização de uma variável de controle; Em seguida, é avaliada a condição: se a condição for verdadeira, o <bloco de comandos> é executado e, ao chegar ao delimitador ou final do comando for, automaticamente se incrementa ou se decrementa a variável de controle e se retorna à avaliação da condição; quando a condição ficar falsa, ou seja, o incremento/decremento fizer a variável de controle chegar no limite da condição, o comando de repetição é finalizado. Os delimitadores { e são obrigatórios quando existe mais de um comando no <bloco de comandos>. Quando existir apenas um comando, os delimitadores ficam opcionais e o ; funcionará como delimitador de fim, indicando o final do comando for. Informações importantes sobre o comando for e exemplos de utilização: for (i=3; i<=5; i++) printf( O valor de i eh: %i\n, i); Nesse caso, i é a variável de controle; inicial corresponde a i=3; condição corresponde a i<=5; e incremento corresponde a somar 1 à variável de controle i++. Pode-se omitir a expressão inicial, se esta já tiver sido avaliada anteriormente no programa, porém o ponto e vírgula deve permanecer. i=3; for ( ; i<=5; i++) printf( O valor de i eh: %d\n, i); A expressão inicial pode ser qualquer expressão válida em C. i=3; for (printf( comecou ) ; i<=5 ; i++) printf( O valor de i é: %d\n, i); Pode-se, também, omitir a expressão incremento ou decremento e avaliá-la no corpo da instrução for. i=3; for ( ;i <= 5; ) { printf( O valor de i e: %d\n, i); i++; 73

69 Elisamara de Oliveira Note que, quando o corpo da instrução for consistir de mais de um comando, é necessário que estes sejam colocados entre os delimitadores {. A expressão condição pode ser constituída por expressões conectadas por operadores lógicos. for(i=0; (i<10 && aux!=0); i++) { printf( \n %d, aux); --aux; achou= i= 0; for( ; (i<10 && achou==0); i++) { printf( \n Digite um inteiro: ); scanf( %i, &aux); achou = (aux == -1); Usando vírgulas, pode-se criar expressões constituídas de duas subexpressões, de forma a realizar duas tarefas. As subexpressões serão avaliadas da esquerda para a direita e toda a expressão será avaliada como o valor da expressão da direita. for(i=0, j=10; i<10; i++, j--) printf( \n%d, %d, i, j); A instrução for pode ser aninhada, ou seja, executada dentro de outra instrução for. for(linha=0; linha<10; linha++) { for(coluna=0; coluna<10; coluna++) printf( \n%d, matriz[linha][coluna]); Podem-se omitir as três expressões: inicial, condição e incremento: for( ; ; ) Tendo-se, então, um loop infinito, que pode, no entanto, ser interrompido dentro do corpo da instrução for por um comando break. i=10; for( ; ; ) { if (i==0) break; --i; 74

70 Algoritmos e Linguagem de Programação Exemplos de comandos for válidos: for (i=10; i>0; i--) printf( \ncontador decrescente= %i,i); i= soma = 0; for ( ; i < 10; i++) { printf( \ndigite o valor da nota do aluno %i=,i); scanf( %f,&nota); soma = soma + nota; for (j=1; j<=1000; j++) { if (j % 2 == 0) printf( \n %i eh par,j); else printf( \n %i eh impar,j); for (j=1; j<=1000; j++) { printf( \ndigite um numero negativo: ); scanf( %i,&n); if (n>=0) break; else printf( \nvalor absoluto de %i = %i, n, abs(n)); Exemplos de comandos for INVÁLIDOS: for (i=10; i<0; i--) printf( \ncontador decrescente= %i,i); (o comando for não será executado nenhuma vez, pois o valor inicial é menor que o valor final e i-- indica contagem decrescente) for (i=10; i>0; i--); printf( \ncontador decrescente= %i,i); (o comando for não vai fazer nada, pois tem um ; indevido i-- ); que faz com que o for finalize printf será executado uma única vez) 75

71 Elisamara de Oliveira for (j=1; j<=1000; j--) { if (j % 2 == 0) printf( \n %i eh par,j); else printf( \n %i eh impar,j); (o comando for não vai parar nunca, pois a condição nunca vai ser falsa; o certo seria usar j++ e não j--) 5.7 Comandos de Leitura e Escrita em C Atenção Na linguagem C, há diversos comandos de leitura e cada um deles é mais adequado aos diferentes tipos básicos. Para a leitura de números, o comando deve ser scanf. Para a leitura de caractere único, o melhor comando é o getche(). Para a leitura de strings (cadeia de caracteres), o melhor comando é gets(). A sintaxe dos comandos de entrada é: scanf( %letra, & variável); em que %letra representa os especificadores de formato e depende do tipo associado à variável: %d ou %i, para variáveis do tipo int, e %f, para variáveis do tipo float. variável = getche(); gets(variável); para variáveis do tipo char (único) para variáveis do tipo char (string) 76

72 Algoritmos e Linguagem de Programação A tabela a seguir mostra um exemplo de declaração de variáveis de tipos básicos, a forma correta de leitura e as bibliotecas do C a serem incluídas. Declaração Leitura Exemplos de conteúdos Biblioteca a ser incluída int numero; scanf( %i, &numero); numero = -5; numero = 2002; stdio.h float valor; scanf( %f, &valor); valor = ; valor = ; stdio.h c = 5 ; char c; c=getche(); c = s ; conio.h c = # ; char nome[20]; gets(nome); Atribuição somente através de função: strcpy(nome, Ana ); conio.h string.h Saiba mais A sintaxe dos comandos de saída é: printf( \n frase %letra, <lista de variáveis>); puts( \n frase ); No comando printf, entre as aspas podem ser escritas somente frases ou frases formadas por palavras intercaladas pelos especificadores de formato %s, %c, %i, %d ou %f, descritos nos comandos de leitura. Caso haja especificadores, para cada especificador utilizado, a variável do tipo correspondente deve constar da <lista de variáveis>. A lista de variáveis é opcional; deve existir somente quando um especificador de formato é colocado na frase entre aspas e, nesse caso, deve haver uma vírgula separando a frase da lista de variáveis e vírgulas separando as variáveis da lista. Os números do tipo float podem ser impressos com formato, no comando printf, para evitar a forma científica, ou seja, para serem impressos em forma estendida. A parte fracionária é truncada caso haja mais casas fracionárias do que a delimitada pelo formato, mas a parte inteira nunca é truncada. Exemplos: %.2f (2 casas na parte fracionária), %3.0f (no mínimo 3 casas na parte inteira, mas não ocorre truncamento nunca, e nenhuma casa na parte fracionária). \n é um código de barra invertida que salta uma linha na tela. Pode ser usado em qualquer posição dentro das aspas em ambos os comandos, puts e printf, e é opcional. O comando puts salta uma linha após a impressão da frase, mesmo sem \n, e não imprime variáveis. 77

73 Elisamara de Oliveira Atenção Explicação adicional Passo a passo do comando de impressão: printf (frase variável1 variável2 variável3); (entre a frase e a variável e entre as variáveis deve haver uma vírgula separando-as) printf (frase, variável1, variável2, variável3); (a frase deve vir entre aspas) printf ( \nfrase, variável1, variável2, variável3); (dentro da frase deve vir um formato para cada variável, compatível com o seu tipo básico) printf ( \nfrase %s %i %f,variável1,variável2,variável3); Exemplo: printf ( \nvc se chama %s, tem %i anos e %.2f metros de altura, nome, idade, altura); Exemplos de comandos de entrada e saída válidos: puts ( \nqual eh o seu nome? ); gets(nome); printf ( \nqual eh a sua idade? ); scanf ( %i,&idade); puts ( \nqual eh a sua altura? ); scanf ( %f,&altura); puts ( \nqual eh o seu sexo? (F/M) ); sexo=getche(); printf ( \n%s, voce tem %i anos e\n %.2m de altura\n, nome, idade, altura); printf ( \nvocê foi aprovado no curso com media= %2.1f, media); 78

74 Algoritmos e Linguagem de Programação 5.8 Comentários em C Os comentários não pertencem às instruções do programa C, mas são úteis para que o programador explique o que está sendo feito. Saiba mais Os comentários podem vir delimitados entre /* */ Ou podem ser comentários de linha // Exemplos de comentários: /* Este trecho calcula a media de notas */ desc = preco*0.15; // calcula desconto de 15% 5.9 Bloco de Programa em C Atenção O Bloco de Programa em C tem a forma: /* comentários */ <inclusão de bibliotecas> <declaração de variáveis> void main() { <bloco de comandos> Apesar de opcional, todo programa C deve começar com o nome do arquivo.c em um comentário dizendo o que o programa faz. Em seguida, devem ser incluídas as bibliotecas.h, que serão utilizadas no programa, através da diretiva #include < >. Em seguida, devem ser declaradas todas as variáveis que serão utilizadas no <bloco de comandos>. Após a declaração das variáveis, deve-se escrever a palavra main( ) ou int main() ou void main(), que delimita a seção em que os comandos podem ser utilizados. O <bloco de comandos> pode conter todos os comandos válidos em C, separados por ponto e vírgula, e estes devem estar contidos entre os delimitadores { e. Nenhum comando pode ser usado fora dessa seção, a não ser o comando de atribuição para inicializar variáveis na sua declaração. É importante notar que letras maiúsculas e minúsculas alteram os identificadores e as palavras reservadas do C. Alguns compiladores C não aceitam void main( ), mas int main() ou apenas main(). Nesses casos, é necessário colocar o comando return 0; antes de finalizar o programa. 79

75 Elisamara de Oliveira Exemplos de programas escritos em C válidos: /* nomesexo.c: le o nome e o sexo de uma pessoa e imprime uma frase dizendo se é masculino ou feminino */ #include <stdio.h> #include <conio.h> char nome[20], sexo; int main () { puts ( Qual eh o seu nome? ); gets(nome); printf ( \nqual eh o seu sexo? (F/M) ); sexo=getche(); if (sexo == F sexo == f ) printf ( \n%s, voce eh do sexo feminino.,nome); else printf ( \n%s, voce eh do sexo masculino.,nome); puts( \n Fim do programa ); getch(); // para a tela return 0; /* switch.c - avalia o conhecimento do usuário */ #include <stdio.h> #include <conio.h> int opcao; int main() { printf( \nteste de avaliacao de conhecimento\n ); printf( \npergunta: Em que ano o Brasil foi descoberto? ); printf( \n 1- Em 100 AC por Pitagoras ); printf( \n 2- Em 1492 por Cristovao Colombo ); printf( \n 3- Em 1500 por Pero Vaz de Caminha ); printf( \n 4- Em 1500 por Pedro Alvares Cabral ); printf( \n Qual a sua escolha? ); scanf( %d,&opcao); 80

76 Algoritmos e Linguagem de Programação switch(opcao) { case 1: printf( \nvoce precisa ler mais sobre a historia grega! ); break; case 2: printf( \nele chegou nos paises vizinhos... ); break; case 3: printf( \n Naturalmente voce eh um fã da carta do descobrimento! ); break; case 4: printf( \n Resposta certissima! ); break; default: printf( \nvoce nao escolheu nenhuma das alternativas validas. ); printf( \n Fim do programa ); getch(); return 0; 5.10 Funções Úteis em C Caro(a) aluno(a), a linguagem C fornece uma série de funções úteis que pertencem a diferentes bibliotecas. Segue uma pequena lista das principais funções que você poderá usar quando se fizer necessário. Funções da biblioteca string.h: strcat (destino, fonte); anexa o string <fonte> ao string <destino>. strcpy (destino, fonte); copia o string <fonte> para o string <destino>. strcmp (string1,string2); compara o <string1> com o <string 2> pela ordem alfabética (conforme tabela ASCii), resultando em: menor que 0: <string1> menor que <string2>; igual a 0: <string1> igual a <string2>; maior que 0: <string1> maior que <string2>. 81

77 Elisamara de Oliveira strchr(string, caractere); Verifica se o <caractere> se encontra na <string> e retorna à posição da primeira ocorrência do <caractere> no <string>; se o <caractere> não for encontrado, retorna NULL. tamanho = strlen(string); Retorna o <tamanho> de uma <string> em número de caracteres. strrev(string); Retorna a <string> invertida, ou seja, os caracteres em ordem contrária. strupr(string); Retorna a <string> convertida para letras maiúsculas. strlwr(string); Retorna a <string> convertida para letras minúsculas. Funções da biblioteca ctype.h: letra=toupper(letra); Converte uma <letra> para maiúsculo. letra=tolower(letra); Converte uma <letra> para minúsculo. Funções da biblioteca conio.h clrscr(); Limpa a tela. textcolor(cor); Muda a cor da letra. textbackground(cor); Muda a cor do fundo. gotoxy(coluna, linha); Posiciona o cursor nas coordenadas especificadas. 82

78 Algoritmos e Linguagem de Programação Funções da biblioteca math.h Trigonométricas sin() cos() tan() Retorna o valor do seno. Recebe como argumento o valor dos graus em double. Retorna o valor do cosseno. Recebe como argumento o valor dos graus em double. Retorna o valor da tangente. Recebe como argumento o valor dos graus em double. Logarítmicas log() Retorna o valor do logaritmo na base 2. Exige um argumento do tipo double. log10() Potenciação Retorna o valor do logaritmo na base 10. Exige um argumento do tipo double. pow() Retorna o valor da base elevada ao expoente. Recebe dois argumentos do tipo double : o primeiro é a base e o segundo o expoente. Por exemplo: se quisermos saber o resultado da operação 2 10, faríamos pow (2, 10). sqrt() Arredondamento ceil() floor() Retorna o valor da raiz quadrada. Recebe como argumento um double do qual ele deve extrair a raiz. Retorna o primeiro float sem casas decimais acima. Recebe um float como argumento. Exemplo: ceil ( ) resultaria em 46. Retorna o primeiro float sem casas decimais abaixo. Recebe um float como argumento. Exemplo: floor ( ) resultaria em

79 Elisamara de Oliveira Outras funções system system( cls ); Limpa a tela. system( pause ); Faz uma pausa ou para a tela. system( color 0B ); Cor de fundo preta e letras azuis brilhantes Tradução de PortuCê para a Linguagem C Como você viu, caro(a) aluno(a), aprender PortuCê ajuda bastante a aprender C! Use a tabela a seguir para ajudá-lo(la) na tradução de comandos do PortuCê para C! Saiba mais Comandos/Tipos PortuCê C Atribuição = = inteiro int Tipos básicos inteiro longo long int real float caractere char inteiro %i ou %d real %f Formatos caractere único %c string %s inteiro longo %ld Condicional se senão if else Seleção múltipla escolha switch Leitura de caracteres leia getche() Leitura de strings leia gets Leitura de números leia scanf Escrita imprima printf Escrita imprima puts e && Operadores lógicos ou não! 84

80 Algoritmos e Linguagem de Programação Caro(a) aluno(a), você deve implementar todos os programas em C usando o compilador de sua preferência. No final da apostila, eu indico um compilador que é fácil de ser encontrado na internet, é gratuito e fácil de usar (o compilador Dev C++). /* sexo.c: le o nome e o sexo de uma pessoa e imprime uma frase dizendo se é masculino, feminino ou invalido */ caractere nome[20], sexo; principal ( ) { imprima ( Qual eh o seu nome? ); leia( %s,nome); imprima ( Qual eh o seu sexo? (f/m) ); leia ( %c,sexo); se (sexo == f ou sexo == F ) imprima ( %s voce eh do sexo feminino.,nome); senão se (sexo == m ou sexo == M ) imprima ( %s voce eh do sexo masculino.,nome); senão imprima ( Voce digitou um sexo invalido ); imprima( Fim do programa. ); /* sexo.c: le o nome e o sexo de uma pessoa e imprime uma frase dizendo se é masculino, feminino ou invalido */ #include <stdio.h> #include <conio.h> char nome[20], sexo; int main() { puts ( Qual eh o seu nome? ); gets(nome); puts ( \nqual eh o seu sexo? (f/m) ); sexo = getche(); if (sexo == f sexo == F ) printf ( \n%s voce eh do sexo feminino.,nome); else if (sexo == m sexo == M ) printf ( \n%s voce eh do sexo masculino.,nome); else printf ( \nvoce digitou um sexo invalido ); puts( \nfim do programa. ); getch(); 85

81 Elisamara de Oliveira return 0; /* idade.c: le o ano atual e o ano de nascimento de uma pessoa e imprime uma frase dizendo qual eh a idade da pessoa */ inteiro anoatual, anonasc, idade; principal() { imprima ( Qual eh o ano atual? ); leia( %i,&anoatual); imprima ( Qual eh o seu ano de nascimento? ); leia ( %i,&anonasc); idade = anoatual anonasc; imprima ( Voce fez ou fara %i anos, idade); imprima( Fim do programa. ); /* idade.c: le o ano atual e o ano de nascimento de uma pessoa e imprime uma frase dizendo qual eh a idade da pessoa */ #include <stdio.h> #include <conio.h> int anoatual, anonasc, idade; main() { printf ( \nqual eh o ano atual? ); scanf( %i,&anoatual); printf ( \nqual eh o seu ano de nascimento? ); scanf ( %i,&anonasc); idade = anoatual anonasc; printf ( \nvoce fez ou fara %i anos, idade); puts( \nfim do programa. ); getch(); return 0; 86

82 Algoritmos e Linguagem de Programação /* parimpar.c: le um numero e verifica se ele eh par ou impar */ inteiro n; principal() { imprima ( \ndigite um numero inteiro: ); leia ( %i,&n); se (n % 2 == 0) imprima ( O numero %i eh par, n); senão imprima ( O numero %i eh impar, n); imprima( Fim do programa. ); /* parimpar.c: le um numero e verifica se ele eh par ou impar */ #include <stdio.h> #include <conio.h> int n; int main() { printf ( \ndigite um numero inteiro: ); scanf( %i,&n); if (n % 2 == 0) printf ( \no numero %i eh par, n); else printf ( \no numero %i eh impar, n); puts( \nfim do programa. ); getch(); return 0; 87

83 Elisamara de Oliveira /* nota.c: le a nota de um aluno e verifica se ele foi aprovado ou reprovado */ real nota; principal() { imprima ( Digite sua nota final: ); scanf( %f,&nota); se (nota >= 6.0) imprima ( Voce foi aprovado! ); senão imprima ( Voce foi reprovado... ); imprima( Fim do programa. ); /* nota.c: le a nota de um aluno e verifica se ele foi aprovado ou reprovado */ #include <stdio.h> #include <conio.h> float nota; void main() { printf ( \ndigite sua nota final: ); scanf( %f,&nota); if (nota >= 6.0) printf ( \nvoce foi aprovado! ); else printf ( \nvoce foi reprovado... ); printf( \n Fim do programa. ); getch(); 88

84 Algoritmos e Linguagem de Programação 5.12 Resumo do Capítulo Neste capítulo, caro(a) aluno(a), você aprendeu uma metodologia que facilitará o processo de desenvolvimento de soluções algorítmicas para os problemas que serão propostos para você resolver. A metodologia é composta de uma sequência de passos, cujo principal objetivo é ajudá-lo a resolver problemas dividindo-os por partes, diminuindo, assim, a sua complexidade Atividades Propostas 1. Traduzir o algoritmo em PortuCê para C: /* Eleicoes.c: este programa computa os votos de uma eleição e divulga os números obtidos e o candidato vencedor.*/ inteiro voto, vencedor, brancos, nulos, eleitores, cont1, cont2, cont3; principal() { imprima ( digite o seu voto (1,2,3 ou 0(branco) -1 finaliza): ); leia ( %i,&voto); brancos=nulos=eleitores=cont1=cont2=cont3=0; enquanto (voto!= -1) { ++eleitores; se (voto == 1) ++cont1; senão se (voto == 2) ++cont2; senão se (voto == 3) ++cont3; senão se (voto == 0) ++brancos; senão ++nulos; imprima ( digite o seu voto (1,2,3 ou 0(branco) 1 finaliza): ); leia ( %i,&voto); se ((cont1 > cont2) e (cont1 > cont3)) vencedor = 1; senão se ((cont2 > cont1) e (cont2 > cont3)) vencedor = 2; senão vencedor = 3; imprima ( o candidato vencedor foi: %i, vencedor); imprima ( numero de votos em branco: %i, brancos); imprima ( numero de votos nulos: %i,nulos); imprima ( numero de eleitores: %i,eleitores); 89

85 Elisamara de Oliveira 2. Crie uma nova versão do programa em C do exercício utilizando o comando switch no lugar do ninho de comandos if. 3. Faça um programa em C que calcule e imprima o valor em reais correspondente aos dólares que um turista possui no cofre do hotel. O programa deve solicitar os seguintes dados: quantidade de dólares guardada no cofre e cotação do dólar naquele dia. 4. Faça um programa em C para calcular e imprimir o valor a ser pago pelo período de estacionamento do automóvel. O usuário entra com os seguintes dados: hora e minuto de entrada, hora e minuto de saída. Sabe-se que esse estacionamento cobra R$ por hora ou fração. 5. Faça um programa em C que leia o valor do salário atual, calcule e imprima o valor do novo salário de um funcionário. Considere que o funcionário deverá receber um reajuste de 15% caso seu salário seja menor que R$ Se o salário for maior ou igual a R$ 500, mas menor ou igual a R$ , o reajuste deve ser de 10%. Caso o salário seja maior que R$ , o reajuste deve ser de 5%. 6. Faça um programa em C tendo como dados de entrada o preço de um produto e seu código de origem; apresente o preço e a sua procedência, de acordo com a tabela a seguir: Código de Origem Procedência 1 Sul 2 Sudeste 3 Centro-Oeste 4 Norte 5 Nordeste 90

86 6 USANDO COMANDOS DE REPETIÇÃO EM C 6.1 Comando de Repetição Entrada Indeterminada de Dados (uso de flags) Aqui você vai aprender a usar o comando repetitivo e a resolver problemas que envolvam flags. Flag vem do inglês e significa sinal ou bandeira. Um flag em programação representa um valor que é usado para indicar o final da entrada de dados. Como já foi dito antes, um algoritmo é usado para resolver problemas finitos. Se alguém pede que façamos um programa para ler uma quantidade indeterminada de números, aparentemente não poderíamos escrever um algoritmo para resolvê-lo, mas, se um flag é informado, a solução se torna possível: faça um programa para ler uma quantidade indeterminada de dados, sabendo-se que o último valor será -1. Veja bem: a quantidade de números continua indeterminada, isto é, não sabemos se serão 5, 20, 2 ou 2000 números, mas sabemos que o último é -1! Assim, -1 é o flag e os números serão lidos até que seja fornecido o -1, quando o programa irá parar de ler os números. Vamos ver isso na prática! 1. Escreva comandos para ler e imprimir vários números inteiros. O último número é 0 (flag=0). É importante que você observe a lógica de um trecho de algoritmo que trabalha com flag. Antes de o número n ser processado, é necessário verificar se ele é o flag ou não. Por isso, é feita uma leitura AN- TES do início do comando de repetição while. No entanto, é necessário que o número n seja lido novamente dentro do comando while para que a condição que determina a finalização do comando seja modificada (senão o comando while nunca para) e também para que a leitura indeterminada de dados prossiga; essa nova leitura é feita no FINAL do comando while! Não pretendo aqui dar uma receita de bolo para você seguir, mas apenas chamar a sua atenção para a lógica desse tipo de problema que poderá ser utilizada, com certeza, em muitos outros problemas que envolvam o uso de flags. 91

87 Elisamara de Oliveira 2. Escreva comandos para ler e imprimir vários números inteiros e contar a quantidade de números lidos. O último número é 0 (flag=0). Imprima, também, a quantidade de números. É importante que você observe a lógica para se contar a quantidade de números fornecidos. Quando o flag é utilizado, sabe-se que a entrada de dados é indeterminada. Quando se deseja saber quantos valores válidos foram fornecidos, é necessário usar um contador (neste algoritmo é o cont). O contador tem que ser inicializado com zero. Cada vez que uma repetição é realizada (ou seja, cada vez que o comando while é executado), soma-se mais 1 ao contador. A impressão do conteúdo do contador só pode ser feita após o final do comando while, quando temos a certeza de que a entrada de dados foi finalizada (ou seja, o flag foi fornecido). 3. Escreva comandos para ler e somar vários números inteiros. O último número é -1 (flag= -1). 92

88 Algoritmos e Linguagem de Programação 4. Escreva comandos para ler e imprimir a idade e o nome de várias pessoas (última idade=0). Temos, neste exemplo, um caso em que há mais de uma variável a ser lida e apenas uma dessas variáveis vai funcionar como flag. Nesse caso, a lógica tem que ser um pouco alterada: a variável que será utilizada como flag deve ser lida ANTES do começo do comando while e sua leitura deve ser repetida DENTRO do comando imediatamente ANTES DO FINAL do comando while (observe os comandos em destaque); todas as outras variáveis devem ser lidas apenas uma vez, DENTRO do comando while, bem no seu início! 5. Escreva comandos para ler e imprimir a idade, o nome e a altura de várias pessoas (última idade=0). Crie uma forma alternativa. Observe que, neste exemplo, o comando while não para nunca, pois a condição é sempre 1, ou seja, sempre verdadeira. Para finalizar o comando while, foi utilizado o comando break, ou seja, quando o usuário digitar 0 para a idade, o comando while é finalizado pelo break. Isso pode ser feito, sim, sem problemas! 93

89 Elisamara de Oliveira 6.2 Comando de Repetição Entrada de Dados Determinada Você vai continuar usando um comando repetitivo, mas para resolver problemas que envolvam contadores. Ao contrário do que vimos na seção 6.1, em que entradas indeterminadas de dados foram tratadas, aqui estudaremos os problemas cuja entrada de dados é DETERMINADA. Se alguém pede que façamos um programa para ler um conjunto de 10 números, seria necessário que contássemos de 1 até 10 e, a cada contagem, lêssemos um dos números do conjunto para que, no final, todos os 10 valores tivessem sido lidos. Esse tipo de problema requer o uso de contadores para facilitar a contagem dos dados de entrada. Existe um comando específico para fazer essa contagem, que é o comando for, embora também possamos usar o comando while. Vamos ver isso na prática! 6. Escreva comandos para ler e imprimir o nome de 5 pessoas. Novamente, é importante que você observe a lógica de um trecho de programa que trabalha com entrada determinada de dados. Antes de o nome ser lido, é necessário zerar o contador cont. Daí, utiliza- -se o comando while, cuja condição é exatamente o contador ser menor do que o número de dados a serem lidos (cont < 5, neste caso). DENTRO do comando while é feita, uma única vez, a leitura do nome, o nome é impresso e somente no FINAL do comando while o contador é incrementado de 1. No entanto, este mesmo trecho pode ser escrito com um comando mais adequado, que é o comando for! Vejamos: Percebeu como é mais fácil? O comando for começa do zero e vai somando 1 à variável de controle cont até que cont fique igual a 5! DENTRO do comando for é feita, uma única vez, a leitura do nome e o nome é impresso. 94

90 Algoritmos e Linguagem de Programação 7. Escreva comandos para ler e imprimir o nome, a idade e a altura de 10 pessoas. Observe que, quando há mais de uma variável a ser lida, todas elas devem ser lidas apenas uma vez DENTRO do comando for. A contagem fica como antes. Fácil, não é? 8. Escreva comandos para pedir ao usuário o número de dados que ele deseja fornecer (N), leia e imprima o nome e a quantidade que ele forneceu. Note que a única mudança na solução deste tipo de problema é a leitura da quantidade de dados ANTES do comando for e a mudança na condição de finalização para (cont < n). 9. Reescreva o trecho 8 usando while (1). 95

91 Elisamara de Oliveira 10. Reescreva o trecho 9 usando for ( ; ; ). 6.3 Exemplo dos Minutos Telefônicos A empresa TELEFUN está interessada em saber qual foi o maior número de minutos gastos no mês entre os assinantes e quantos assinantes atingiram esse valor. Faça um programa que leia os valores dos minutos (o último valor será -1) e imprima os resultados desejados pela empresa. Passo 1 (ler e entender o problema) Certa companhia telefônica quer saber qual foi o maior número de minutos gastos num certo mês e quantos assinantes empataram atingindo esse valor máximo. Por exemplo, se o conjunto de minutos é fornecido: 200, 150, 300, 200, 300, -1 O resultado seria: 300 foi o maior número de minutos e 2 assinantes atingiram o valor máximo. Passo 2 (dados de entrada) 1. Valor dos minutos Passo 3 (dados de saída) 1. Maior número de minutos 2. Quantos assinantes atingiram o maior número de minutos 96

92 Algoritmos e Linguagem de Programação Passo 4 (variáveis auxiliares) Não há variáveis auxiliares a serem geradas (para se chegar a essa conclusão, o raciocínio foi o seguinte: para o cálculo do maior número de minutos, é necessário apenas comparar o valor dos minutos dado de entrada com o maior valor de minutos dado de saída, ou seja, não precisa de variável auxiliar; para saber a quantidade de assinantes, somente o contador é necessário) Passo 5 (declarar as variáveis) int minutos, maior minutos, quantos; (uma variável para cada entrada, saída e auxiliar: total de 3 variáveis. Todas do tipo int.) Passo 6 (inicializar as variáveis) printf( \ndigite o numero de minutos: ); scanf ( %i,& minutos); (variável de entrada do tipo int: inicializada com scanf ) maiorminutos = 0; (quando se deseja selecionar o maior valor, uma estratégia possível é considerar o primeiro valor lido como sendo o maior ou então como sendo zero e depois fazer a comparação dos outros valores com este) quantos = 0; (contador: inicializado com zero. Poderia ser inicializado na declaração também) Passo 7 (cálculo das saídas) Há apenas 2 variáveis de saída, então, dois trechos a serem construídos. Para se selecionar o maior número de minutos, é necessário compará-lo com o valor dos minutos que serão lidos. O comando a ser utilizado é o if. 97

93 Elisamara de Oliveira if (minutos > maiorminutos) { maiorminutos = minutos; quantos = 1; No caso de essa comparação ser verdadeira, o maior valor dos minutos deve ser mudado: maiorminutos = minutos. Mas, ao se alterar o valor do maiorminutos, o contador de assinantes que o atingiram deve ser retornado para 1, pois este seria o primeiro assinante que o utilizou: quantos = 1. Resta, agora, contar a quantidade de assinantes que atingiram o valor máximo de minutos. Isso deve ser feito através de outra comparação. Cada vez que o valor do maior número de minutos for encontrado novamente, deve-se somar 1 ao contador: if (minutos == maiorminutos) ++quantos; No entanto, esses 2 trechos devem ser unidos num único comando if, pois não se deve somar +1 ao contador quantos quando ocorre a troca do valor de maiorminutos, senão o contador ficaria sempre com um 1 a mais. Para manter os dois trechos separados, o contador quantos teria que ser inicializado com zero. Faça alguns testes você mesmo(a) para entender melhor essa explicação. if (minutos > maiorminutos) { maiorminutos = minutos; quantos = 1; else if (minutos == maiorminutos) ++quantos; Passo 8 (impressão dos resultados) if (maiorminutos!=0) { printf( \no maior numero de minutos foi: %i, maiorminutos); printf( \nassinantes que atingiram o maior nro de minutos: %i, quantos); else printf ( \nnenhum valor valido foi fornecido ); 98

94 Algoritmos e Linguagem de Programação Passo 9 (montagem do programa) /* telefun.c: este programa lê um conjunto de valores de minutos, seleciona o maior deles e conta quantos assinantes atingiram este valor */ #include <stdio.h> #include <conio.h> int minutos, maiorminutos=0, quantos=0; int main() { printf( \ntelefun: quem fala mais ao telefone???\n ); while (1) { printf( \ndigite o numero de minutos (-1 finaliza): ); scanf( %i,&minutos); if (minutos = -1) break; if (minutos > maiorminutos) { maiorminutos = minutos; quantos = 1; else if (minutos == maiorminutos) ++quantos; if (maiorminutos!=0) { printf( \no maior numero de minutos foi: %i, maiorminutos); printf( \nassinantes que atingiram o maior nro de minutos: %i, quantos); else printf ( \nnenhum valor valido foi fornecido ); printf( \nfim do programa ); getch(); return 0; Passo 10 (fazer o teste de mesa do algoritmo) Suponha os seguintes valores de entrada: 100, 50, 100, 150, 150, 10, 150, -1 minutos maior minutos quantos Resultados O maior número de minutos foi: 150 Número de assinantes que atingiram o maior número de minutos: 3 99

95 Elisamara de Oliveira Suponha o seguinte valor de entrada: -1 minutos maiorminutos quantos Resultados Nenhum valor válido foi fornecido 6.4 Exemplo do Preço Final de Automóveis O preço final de um automóvel novo é calculado da seguinte forma: ao preço de fábrica, são acrescidos 35% de IPI e sobre o preço já com o IPI é acrescido 5% correspondente ao ICMS. Faça um programa que leia o nome de vários modelos de automóveis (flag=fim) e o seu preço de fábrica e calcule e imprima o seu preço final. Passo 1 (ler e entender o problema) Suponhamos a seguinte entrada de dados: BMW GOL FIM O preço final do BMW seria assim calculado: IPI x 0.35 = PRIPI ç = FINAL PRIPI x 1.05 = O preço final do GOL seria assim calculado: IPI x 1.35 = PRIPI ç = FINAL ç PRIPI x 1.05 =

96 Algoritmos e Linguagem de Programação Passo 2 (dados de entrada) 1. Nome do modelo do automóvel 2. Preço de fábrica do automóvel Passo 3 (dados de saída) 1. Preço final do automóvel Passo 4 (variáveis auxiliares) 1. Valor do IPI 2. Preço do automóvel com o IPI (para se chegar a essa conclusão, o raciocínio foi o seguinte: dado o preço de fábrica, primeiramente calcula-se o preço com o IPI numa variável auxiliar; depois é feito o cálculo do preço do carro com o valor do IPI, gerando duas variáveis auxiliares) Passo 5 (declarar as variáveis) char nome[20]; float prfabrica, IPI, pripi, prfinal; (uma variável para cada entrada, uma para cada saída, uma para cada auxiliar: total de 5 variáveis) Passo 6 (inicializar as variáveis) printf( \nforneca o nome do modelo do automovel: ); gets (nome); printf( \nforneca o preco de fabrica do automovel: ); scanf ( %f,&prfabrica); (variáveis de entrada: inicializadas com comandos de leitura) (as outras variáveis não precisam de valores iniciais, pois o IPI, o preço com o IPI e o preço final serão calculados diretamente) 101

97 Elisamara de Oliveira Passo 7 (escrever o código para calcular as saídas) Há apenas uma variável de saída, então um trecho de algoritmo a ser construído. Para se chegar ao preço final, no entanto, primeiramente é necessário calcular o preço com o IPI. IPI = prfabrica * 0.35; pripi = prfabrica + IPI; prfinal = pripi * 1.05; Aqui são apresentadas 2 formas diferentes de se fazer o cálculo de porcentagem. No caso do IPI, isso foi feito em 2 passos: primeiramente, calcula-se o IPI e depois soma-se esse valor ao preço de fábrica para se obter o preço com IPI. No caso do ICMS, foi feito um único cálculo multiplicando-se o preço com IPI por Nesse caso, o valor 1 na parte inteira faz com que seja somado ao preço com IPI o valor do ICMS! Passo 8 (impressão dos resultados) printf( \nipi= R$%.2f ICMS= R$%.2f,IPI,prIPI*0.05); printf ( \no preco final do automovel %s= R$ %.2f, nome, prfinal); 102

98 Algoritmos e Linguagem de Programação Passo 9 (montagem do algoritmo) /* zerokm.c: este programa le o nome e o preco de fabrica de varios automoveis e calcula seu preço final. */ #include <stdio.h> #include <conio.h> #include <string.h> #include <stdlib.h> char nome[20]; float prfabrica, IPI, pripi, prfinal; int main() { printf( \nolha o tanto de imposto que pagamos nos carros!!! ); while (1) { printf( \nforneca o nome do modelo do automóvel (FIM para terminar): ); gets (nome); if (strcmp(nome, FIM )==0) break; printf( \nforneca o preco de fabrica do automovel: ); scanf ( %f,&prfabrica); IPI = prfabrica * 0.35; pripi = PrFabrica + IPI; prfinal = pripi * 1.05; printf( \nipi= R$%.2f ICMS= R$%.2f,IPI,prIPI*0.05); printf ( \npreco final do automovel %s= R$ %.2f,nome, prfinal); fflsuh(stdin); //limpa o teclado para evitar erros na leitura de strings puts ( \nfim do programa ); getch(); return 0; Passo 10 (fazer o teste de mesa do programa) Suponha os seguintes valores de entrada: FOX SCOOTER MILLE CIVIC FIM 103

99 Elisamara de Oliveira nome prfabrica IPI pripi prfinal Resultados FOX SCOOTER MILLE CIVIC FIM IPI= R$ ICMS= Preco final do automovel FOX= R$ IPI= R$ ICMS= Preco final do automovel SCOOTER= R$ IPI= R$ ICMS= Preco final do automovel MILLE= R$ IPI= R$ ICMS= Preco final do automovel CIVIC= R$ Fim do programa 6.5 Exemplo da Eleição Existem 3 candidatos a uma vaga no senado. Durante a eleição, os votos são computados eletronicamente através do seguinte código: 1, 2, 3 è votos para os candidatos 1, 2 e 3 0 è voto em branco 0,1,2,3 è voto nulo -1 è fim dos votos Fazer um programa que compute os votos da eleição, forneça o número do candidato vencedor, a quantidade de votos nulos e brancos e a quantidade de eleitores que participaram da eleição. Suponha que não haverá empates. Passo 1 (ler e entender o problema) Vamos simular a eleição e computar seus resultados. Esses foram os votos: 0,2,3,2,3,1,1,1,3,2,0,1,1,0,3,5,1,9,3,-1. Votos do candidato 1: 6, votos do candidato 2: 3, votos do candidato 3: 5, votos em branco: 3, votos nulos: 2, total de eleitores: 19. Resultados: Candidato vencedor: 1 Quantidade de votos brancos: 3 Quantidade de votos nulos: 2 Total de eleitores: 19 Passo 2 (dados de entrada) 1. Votos 104

100 Algoritmos e Linguagem de Programação Passo 3 (dados de saída) 1. Candidato vencedor 2. Votos brancos 3. Votos nulos 4. Total de eleitores Passo 4 (variáveis auxiliares) 1. Contador de votos para o candidato 1 2. Contador de votos para o candidato 2 3. Contador de votos para o candidato 3 Passo 5 (declarar as variáveis) int voto; int vencedor, brancos, nulos, eleitores; int cont1, cont2, cont3; Passo 6 (inicializar as variáveis) printf( \ndigite o seu voto (1,2,3 ou 0(branco)): ); scanf ( %i,&voto); (variável de entrada: inicializada com scanf ) brancos=nulos=eleitores=cont1=cont2=cont3=0; (contadores: inicializados com zero. Em C, é possível inicializar várias variáveis com o mesmo valor num único comando de atribuição múltipla!) 105

101 Elisamara de Oliveira Passo 7 (escrever o código para calcular as saídas) Para se saber quem foi o candidato vencedor, é necessário, primeiramente, computar os votos: ++eleitores; if (voto == 1) ++cont1; else if (voto == 2) ++cont2; else if (voto == 3) ++cont3; else if (voto == 0) ++brancos; else ++nulos; Existe outra maneira muito mais prática de realizar essa comparação. Basta usar o comando de seleção múltipla switch. Veja como fica a solução. ++eleitores; switch (voto) { case 0: ++brancos; break; case 1: ++cont1; break; case 2: ++cont2; break; case 3: ++cont3; break; default: ++nulos; Note que os dois trechos de código fazem exatamente a mesma coisa, mas de formas diferentes. Escolha a que achar mais fácil. Ao se computar os votos, as saídas 2, 3 e 4 foram obtidas; resta agora obter o candidato vencedor. if ((cont1 > cont2) && (cont1 > cont3)) vencedor = 1; else if ((cont2 > cont1) && (cont2 > cont3)) vencedor = 2; else vencedor = 3; 106

102 Algoritmos e Linguagem de Programação Passo 8 (impressão dos resultados) printf( \no candidato vencedor foi: %i, vencedor); printf( \nnumero de votos em branco: %i,brancos); printf( \nnumero de votos nulos: %i,nulos); printf( \nnumero de eleitores: %i,eleitores); Passo 9 (montagem do programa) /* Eleicoes.c: computa os votos de uma eleição e divulga os números obtidos e o candidato vencedor.*/ #include <stdio.h> #include <conio.h> int voto, vencedor, brancos, nulos, eleitores, cont1, cont2, cont3; int main () { printf( \neleicoes Ficha Limpa por um Brasil melhor!\n ); brancos=nulos=eleitores=cont1=cont2=cont3= 0; while (1) { printf ( \ndigite o seu voto (1,2,3 ou 0(branco) -1 finaliza): ); scanf ( %i,&voto); if (voto==-1) break; ++eleitores; switch (voto) { case 0: ++brancos; break; case 1: ++cont1; break; case 2: ++cont2; break; case 3: ++cont3; break; default: ++nulos; if ((cont1 > cont2) && (cont1 > cont3)) vencedor = 1; else if ((cont2 > cont1) && (cont2 > cont3)) vencedor = 2; else vencedor = 3; printf ( \no candidato vencedor foi: %d, vencedor); printf ( \nnumero de votos em branco: %d, brancos); printf ( \nnumero de votos nulos: %d,nulos); printf ( \nnumero de eleitores: %d,eleitores); puts( \nfim do programa ); getch(); return 0; 107

103 Elisamara de Oliveira Passo 10 (fazer o teste de mesa do algoritmo) Suponha os seguintes valores de entrada: 1, 2, 2, 0, 2, 1, 3, -1 voto cont1 cont2 cont3 brancos nulos eleitores vencedor Resultados -1 2 O candidato vencedor foi: 2 Numero de votos em branco: 1 Numero de votos nulos: 0 Numero de eleitores: 7 Fim do programa 6.6 Exemplo da Série Numérica Escreva um programa que leia N e calcule e imprima o valor de S dado por: Passo 1 (ler e entender o problema) Vamos simular um determinado valor inicial de N = 5. A série S resultante seria: Passo 2 (dados de entrada) 1. Valor de N 108

104 Algoritmos e Linguagem de Programação Passo 3 (dados de saída) 1. Valor de S Passo 4 (variáveis auxiliares) 1. Contador de termos 2. Numerador 3. Denominador Passo 5 (declarar as variáveis) int N, cont, num, den; float termo, S; Passo 6 (inicializar as variáveis) printf( \ndigite a quantidade de termos da serie: ); scanf ( %i,&n); (variável de entrada: inicializada com scanf ) S=cont=0; (contadores e somadores: inicializados com zero. Em C, é possível inicializar várias variáveis com o mesmo valor num único comando de atribuição múltipla!) num = 1; den = N; (o primeiro numerador começa com 1 e o primeiro denominador começa com N) 109

105 Elisamara de Oliveira Passo 7 (escrever o código para calcular as saídas) Para se calcular a saída, é necessário gerar os N termos da série. Cada termo é formado pelo numerador dividido pelo denominador. O próximo numerador ganha 1 (soma 1) e o próximo denominador perde 1 (subtrai 1). Observe na solução a conversão para float do resultado de num/den (o resultado seria inteiro pois envolve operandos inteiros). for (cont=0; cont < N; cont++) { termo = (float) num / den; printf( \n %i / %i, num, den); S = S + termo; ++num; --den; Passo 8 (impressão dos resultados) printf ( \n\no valor da serie S= %.5f \n, S); 110

106 Algoritmos e Linguagem de Programação Passo 9 (montagem do programa) /*... series.c: Gera a serie S assim formada: S = 1/N + 2/N N/1...*/ #include <stdio.h> #include <conio.h> int N, cont, num, den; float termo, S; int main( ) { printf( Gera a serie S \n ); printf( \nforneca o numero de termos da serie: ); scanf( %d,&n); num = 1; den = N; for (cont=0; cont < N; cont++) { termo = (float) num / den; printf( \n %i / %i, num, den); S = S + termo; ++num; --den; printf ( \n\no valor da serie S= %.5f \n, S); getch(); return 0; Passo 10 (fazer o teste de mesa do algoritmo) Suponha o seguinte valor de entrada: 4 N cont num den termo S Resultados / /4 1/ / /4 + 2/3 2/ / /4 + 2/3 + 3/2 3/ / /4 + 2/3 + 3/2 + 4/1 4/1 O valor da serie S=

107 Elisamara de Oliveira 6.7 Resumo do Capítulo Caro(a) aluno(a), aprendemos a usar o comando repetitivo e a resolver problemas que envolvam flags. Flag vem do inglês e significa sinal ou bandeira. Um flag em programação representa um valor que é usado para indicar o final da entrada de dados. Como já foi dito antes, um algoritmo é usado para resolver problemas finitos. Se alguém pede que façamos um programa para ler uma quantidade indeterminada de números..., aparentemente não poderíamos escrever um algoritmo para resolvê-lo. 6.8 Atividades Propostas Vamos praticar um pouco mais agora. A minha forte recomendação, novamente, é que você faça os exercícios sozinho(a), consultando os exemplos dados para ajudá-lo(a). Somente depois da sua tentativa é que você deve conferir as respostas. Boa sorte! 1. Escreva um programa em C que leia e imprima o nome e as duas notas de vários alunos. O último aluno terá o nome=fim. 2. Escreva um programa em C que leia 10 números, calcule e imprima a sua soma. 3. Escreva um programa em C que calcule e imprima N números pares, começando do zero. Pergunte ao usuário quantos números ele deseja (ou seja, peça-lhe para fornecer o valor de N). 4. Quais os resultados produzidos pelo programa? #include <stdio.h> int X, Y; int main() { Y = 0; X = -1; while (Y!= 4) { X = X * -1; ++Y; if (X > 0) /* X é positivo? */ printf( \n%i,y); else printf( \n%i,-y); return 0; 112

108 Algoritmos e Linguagem de Programação Para que seja possível você acompanhar a execução do programa em C, vamos criar uma tabela para fazer o chamado teste de mesa de um programa em C. A tabela deve ter uma coluna para cada variável e uma coluna especial para a impressão dos resultados. O programa em C deve ser seguido comando a comando e os valores das variáveis devem ser alterados de acordo com as instruções. X Y Resultados 5. Faça o teste de mesa do programa seguir e construa a tabela com os valores das variáveis e os resultados do programa. #include <stdio.h> int numero, cont; main() { numero = 2; for (cont=0; cont < 5; cont++) { printf( %i,numero); printf( %i\n,-numero); numero = numero + 2; return 0; numero cont Resultado 113

109 Elisamara de Oliveira 6. Fazer um programa que leia vários valores de ângulos (flag=-1) e verifique a qual quadrante pertence esse ângulo. 7. Fazer um programa que leia vários pares de números N1 e N2 (Flag=N1=0), calcule e imprima: a) N1 * N2 b) N1 / N2 c) N1 - N2 d) N1 + N2 e) 10% de N1 f) 25% de N2 g) raiz quadrada de N1 h) raiz quadrada de N2 i) a unidade de N1 j) a dezena de N2 k) o resto da divisão inteira de N1 por N2 l) N1 elevado a 3 m) N2 elevado a 2 n) N1 elevado a N2 8. Fazer um programa para realizar uma pesquisa de opinião sobre um tema de sua escolha. Devem ser lidas a resposta 1-A favor 2- Contra ou 0-Finaliza e o sexo (1=feminino, 2=masculino) dos participantes; calcular e imprimir: a) o número de mulheres e o percentual; b) o número de homens e o percentual; c) número de votos a favor e percentual; d) número de votos contra e percentual. 114

110 Algoritmos e Linguagem de Programação 9. Fazer um programa para ler vários pares de números inteiros e calcular sua soma, subtração, multiplicação e divisão. Usar n1=0 como flag. 10. Fazer um programa que leia o NOME, a ALTURA, o PESO e a IDADE de vários candidatas a modelo (flag=nome=fim) e verifique se elas podem ser aprovadas ou não para serem modelos: 1.70 <= ALTURA <= <= PESO <= <= IDADE <= Fazer um programa que leia o número de termos desejados e gere as sequências numéricas (uma de cada vez, mas ambas no mesmo programa): 2, 4, 8, 16, 32, , -1, 2, -2, 3, -3, 4, O preço final de um automóvel é calculado pelo preço de fábrica, mais o valor do IPI = 40% sobre o preço de fábrica, mais a porcentagem da concessionária = 10% sobre o preço já com o IPI. Faça um programa que leia o NOME de vários modelos de automóveis (flag=nome=jegue) e o preço de fábrica, calcule e imprima o seu preço final. 13. Faça um programa em C para calcular o valor a ser pago pelo período de estacionamento do automóvel. O usuário entra com os seguintes dados: hora e minuto de entrada, hora e minuto de saída. Sabe-se que esse estacionamento cobra hora cheia, ou seja, se passar um minuto ele cobra a hora inteira. O valor cobrado pelo estacionamento é: R$ 4,00 para 1 hora de estacionamento; R$ 6,00 para 2 horas de estacionamento; R$ 1,00 por hora adicional (acima de 2 horas). 14. Faça um programa que leia o código de um livro (* finaliza) e apresente a categoria do livro, conforme a tabela a seguir: Código do Livro A B C D E Categoria Ficção Romance Documentário Audiolivro Técnico 115

111 Elisamara de Oliveira 15. Fazer um programa que leia vários pares de coordenadas X e Y (flag=x=1000) e verifique a qual quadrante pertence esse ponto (X,Y). A seta indica o sentido positivo dos eixos. 16. Fazer um programa para calcular e imprimir o valor de H, dado pela seguinte série: H = Fazer um programa para calcular a média de um conjunto de números inteiros (flag = -1). 18. Fazer um programa para calcular as raízes de uma equação do 2º grau. Os valores dos coeficientes A, B e C serão fornecidos pelo usuário. Você deve perguntar se o usuário deseja fornecer outros dados até que ele responda N não. 19. Fazer um programa para gerar todos os números potência de 2 menores que e todos os números ímpares menores que 100. Dica: utilize o tipo básico long int. 20. Fazer um programa para calcular o valor aproximado de p, utilizando os N primeiros termos (N deverá ser lido) da série: = Fazer um programa para ler uma sequência de números inteiros de 5 dígitos (flag = -1), calcular o seu dígito verificador (DV) e imprimir o número lido e seu DV separado por um hífen. O DV é calculado somando-se os 5 dígitos do número, dividindo essa soma por 11 e obtendo o resto dessa divisão inteira. Quando o DV for 10, deve-se imprimir X. Exemplo: Número lido: Número impresso: X 116

112 Algoritmos e Linguagem de Programação 22. Números palíndromos são aqueles que têm o mesmo valor se lidos da esquerda para a direita ou da direita para a esquerda, como: 44, 232, 1001, 838 etc. Fazer um programa que leia vários números inteiros de 4 dígitos (flag= -1) e imprima o número lido e uma frase dizendo se ele é palíndromo ou não. 23. Fazer um programa para calcular o Imposto de Renda (IR) de um grupo de contribuintes, sabendo que: a) deverão ser lidos o CPF e a renda anual de cada contribuinte (último contribuinte tem o CPF = 0); b) o IR deverá ser calculado de acordo com a tabela: Renda Anual Alíquota para cálculo do IR até 5000,00 isento de 5000,01 até 50000,00 10 % acima de 50000,01 15 % c) deverá ser impressa uma frase com o CPF do contribuinte, sua renda anual e o valor do IR. 24. Fazer um programa que leia vários conjuntos de dados com: o NOME de um produto, seu preço de CUSTO, seu preço de VENDA e a QUANTIDADE vendida do produto (último conjunto lido tem NOME do produto= fim ) e calcule o lucro obtido com o produto. No final, o programa deve imprimir o NOME do produto que deu mais lucro. 25. Fazer um programa que leia vários números que representem um determinado número de mês do ano (flag=-1), escreva o nome do mês por extenso e o número de dias. Se o mês não existir, imprimir uma frase de erro. 26. Certo produto custa R$ 100,00 e é concedido um desconto de 10% se a compra for acima de 10 unidades, 15% se for acima de 40 unidades e 25% se for acima de 100 unidades. Faça um programa que leia a quantidade desejada por vários clientes (flag=quantidade=0) e calcule e imprima o preço sem desconto, o valor do desconto (se não houver desconto, imprima 0) e o valor a ser pago com o desconto. 27. Faça um programa que leia a distância em quilômetros percorrida por vários carros (flag=0), a quantidade de combustível consumida e calcule e imprima o consumo médio de combustível (consumo= distância/combustível). 28. Faça um programa que leia várias temperaturas em graus Fahrenheit (flag=1000) e calcule e imprima a temperatura em graus Celsius (Celsius = (Fahrenheit-32) * (5/9)). 29. Faça um programa que leia vários pares de valores N1 e N2 (flag=n1=0), imprima uma frase dizendo se eles são iguais, qual é o maior e qual é o menor e, após terminar a leitura de todos os números, selecione e imprima o maior e o menor de todos. 117

113 Elisamara de Oliveira 30. Fazer um programa que leia vários números inteiros (flag=0) e verifique se o número é primo ou não. Um número primo só é divisível por 1 e por ele mesmo (sugestão: tente dividir o número por 2, 3, 4, 5... até o valor do número; se alguma divisão resultar em zero, ele não é primo...). 31. Faça um programa que apresente o menu de livros à venda numa livraria: Código do Livro Título Preço 1 Informática para Concursos 87,00 2 Java como Programar 219,00 3 Use a cabeça: C# 99,00 0 finaliza Para cada opção válida de livro (rejeitar escolhas inválidas), oferecer as formas de pagamento. Código da forma de pagamento Condição de pagamento 1 À vista, com 10% de desconto 2 Em 2 vezes, preço normal de etiqueta sem juros Imprimir todos os valores de acordo com a escolha do usuário. Rejeitar formas de pagamento inválidas. 32. Faça um programa que leia o código de um determinado produto (0 finaliza) e mostre a sua classificação, utilizando a seguinte tabela: Código do Produto (CP) Classificação 1 Alimento não perecível 2, 3 ou 4 Alimento perecível 5 ou 6 Vestuário 7 Higiene pessoal 8 ou 9 Limpeza e utensílios domésticos Qualquer outro código Inválido 118

114 7 OUTROS PROGRAMAS EM C /*CoresnoDevC.c: mostra como usar cores de texto e de fundo no DevC++ */ #include <stdio.h> #include <stdlib.h> #include <conio.h> int main() { system ( cls ); // limpa a tela system ( color 0B ); // cor de fundo preta e letras azuis brilhantes printf ( \n\n\t\t\tteste: AZUL ); getch(); system ( cls ); // limpa a tela system ( color 4C ); // cor de fundo vermelha e letras vermelhas brilhantes printf ( \n\n\t\t\tteste: VERMELHO ); getch(); system ( cls ); // limpa a tela system ( color 5D ); // cor de fundo roxa e letras lilases brilhantes printf ( \n\n\t\t\tteste: LILAS ); getch(); system ( cls ); // limpa a tela system ( color 0E ); // cor de fundo preta e letras amarelas brilhantes printf ( \n\n\t\t\tteste: AMARELO ); getch(); system ( cls ); // limpa a tela system ( color 1B ); // cor de fundo azul e letras azuis claras printf ( \n\n\n ); system ( color /? more ); getch(); 119

115 Elisamara de Oliveira //for.c - ilustra o uso do comando for e de #define #include <stdio.h> #include <conio.h> #define MAXINT 100 #define MAXLONG #define clrscr(); system( cls ); int num, contnum; long int numlong, quadrado; int main() { clrscr(); printf( \n Sequencia de numeros impares menores que %i, MAXINT); printf( \n =============================================\n\n ); for (num=1; num<=maxint; num=num+2) { printf( %i\t,num); getch(); clrscr(); printf( \n Sequencia de numeros pares menores que %i,maxint); printf( \n ===========================================\n\n ); contnum=1; num=0; for (; num<=maxint; num+=2) { printf( %i\t,num); if (contnum==20) { getch(); contnum=0; ++contnum; clrscr(); printf( \n Sequencia de numeros multiplos de 3 menores que %i,maxint); printf( \n ====================================================\n\n ); contnum=1; num=3; for ( ; ; ) { printf( %i\t,num); num=num+3; if (num > MAXINT) break; 120

116 Algoritmos e Linguagem de Programação getch(); clrscr(); printf( \n Sequencia de numeros potencia de 2 menores que %ld,maxlong); printf( \n ======================================================\n\n ); for (numlong=2; numlong<=maxlong; numlong=numlong*2) { printf( %ld\t,numlong); getch(); clrscr(); printf( \n Sequencia de quadrados perfeitos menores que %ld,maxlong); printf( \n ====================================================\n\n ); quadrado=1; for (numlong=1; quadrado<=maxlong; numlong++) { quadrado=numlong*numlong; printf( %ld\t,quadrado); getch(); printf ( \n\n\n\n Fim do programa ); getch(); return 0; /*Multiplos3.c: gera multiplos de 3 menores que 500 */ #include <stdio.h> #include <conio.h> int num, contnum; int main() { printf( \n Sequencia de numeros multiplos de 3 menores que 500 ); printf( \n ========================================\n\n ); contnum=0; num=3; while (num<500) { printf( %i\t,num); num = num + 3; if (contnum==20) { getch(); contnum=0; ++contnum; 121

117 Elisamara de Oliveira printf ( \n\n\n\n Fim do programa ); getch(); return 0; /*Compara.c: mostra como se apresenta um menu e se comparam strings e numeros */ #include <stdlib.h> #include <conio.h> #include <stdio.h> #include <string.h> char str1[20], str2[20]; int num1, num2, opcao; int main() { while ( 1 ) { printf( \n 1- Compara strings ); printf( \n 2- Compara numeros ); printf( \n 0- Finaliza ); printf( \n\n Escolha sua opcao: ); scanf ( %i, &opcao); if (opcao == 0) { printf ( \n Bye, bye! Pressione ENTER... ); getch(); break; switch (opcao) { case 1: printf ( \n Forneca o primeiro nome: ); gets(str1); printf ( \n Forneca o segundo nome: ); gets(str2); if (strcmp(str1,str2) > 0) printf ( \n %s vem depois de %s, str1, str2); else if (strcmp(str1,str2) < 0) printf ( \n %s vem antes de %s, str1, str2); else printf ( \n Os nomes são iguais. ); getch(); break; case 2: printf ( \n Forneca um numero inteiro: ); scanf( %d, &num1); 122

118 printf ( \n Forneca outro numero inteiro: ); scanf( %d, &num2); Algoritmos e Linguagem de Programação if (num1>num2) printf ( \n %d eh maior que %d, num1, num2); else if (num2>num1) printf ( \n %d eh maior que %d, num2, num1); else printf ( \n Os numeros sao iguais! ); getch(); break; default: printf ( \n Opçao de menu invalida. ); getch(); // fim do switch // fim do while (1) return 0; // fim do main() //loja.c: oferece 3 produtos e realiza as vendas com desconto #include <stdio.h> #include <conio.h> #include <stdlib.h> #define limpa; system( cls ); int opcao, qtde; int total1=0, total2=0, total3=0; float fatura=0; float preco, desc, precocomdesc; int main() { while (1) { limpa; printf( \nlojinha da 25 ); printf( \nnas compras acima de 4 unidades ganhe 10%% de desconto!! ); printf( \n1- Celular - R$ ); printf( \n2- Computador - R$ ); printf( \n3- Camera - R$ ); printf( \n-1 Finaliza ); 123

119 Elisamara de Oliveira printf( \nescolha sua opcao: ); scanf( %i,&opcao); if (opcao == -1) break; switch (opcao) { case 1: printf( \nvc esta comprando celulares!!! ); printf( \nquantos celulares vc deseja? ); scanf( %i,&qtde); if (qtde > 0) { total1=total1+qtde; preco= * qtde; if (qtde >=5) { desc = preco * 0.10; precocomdesc = preco - desc; printf( \nvc obteve R$ %.2f de desconto e vai pagar R$ %.2f,desc,precocomdesc); fatura=fatura+precocomdesc; else { printf( \nsua compra totalizou R$ %.2f,preco); fatura=fatura+preco; else printf( \nquantidade invalida. Venda cancelada. ); break; case 2: printf( \nvc esta comprando computadores!!! ); printf( \nquantos computadores vc deseja? ); scanf( %i,&qtde); if (qtde > 0) { total2=total2+qtde; preco= * qtde; if (qtde >=5) { desc = preco * 0.10; precocomdesc = preco - desc; printf( \nvc obteve R$ %.2f de desconto e vai pagar R$ %.2f,desc,precocomdesc); fatura=fatura+precocomdesc; else { printf( \nsua compra totalizou R$ %.2f,preco); fatura=fatura+preco; 124

120 Algoritmos e Linguagem de Programação else printf( \nquantidade invalida. Venda cancelada. ); break; case 3: printf( \nvc esta comprando cameras!!! ); printf( \nquantas cameras vc deseja? ); scanf( %i,&qtde); if (qtde > 0) { total3=total3+qtde; preco= * qtde; if (qtde >=5) { desc = preco * 0.10; precocomdesc = preco - desc; printf( \nvc obteve R$ %.2f de desconto e vai pagar R$ %.2f,desc,precocomdesc); fatura=fatura+precocomdesc; else { printf( \nsua compra totalizou R$ %.2f,preco); fatura=fatura+preco; else printf( \nquantidade invalida. Venda cancelada. ); break; default: printf( \n\nopcao invalida\n ); //switch getch(); //while printf( \n\n\nquantidade vendida de celulares= %i, total1); printf( \n\n\nquantidade vendida de computadores= %i, total2); printf( \n\n\nquantidade vendida de cameras= %i, total3); printf( \n\n\nfaturamento da Lojinha 25 R$ %.2f, fatura); 125

121 Elisamara de Oliveira printf( \n\n\nfim do programa ); getch(); //para a tela return 0; //main printf( \n\n\nfim do programa ); getch(); //para a tela return 0; //main 126

122 8 PRÁTICA EM LABORATÓRIO 8.1 Estudo Dirigido 1. Crie uma pasta com seu nome no diretório do seu computador, em que você armazenará os programas em C deste curso, seguindo as instruções: Entre no Windows Explorer ou na pasta Meu computador do desktop: Clique em <Arquivo> <Novo> <Pasta> Substitua o nome nova pasta criado, pelo seu primeiro nome 2. Faça o download gratuito do compilador Dev-C++ para que possa começar a escrever seus programas. 3. No sistema Windows, localize o compilador Dev-C++ e execute o programa. <Iniciar> <Programas><Dev-C++> 4. No DevC++, crie um novo arquivo <Arquivo> <Novo> <Arquivo Fonte> 127

123 Elisamara de Oliveira 5. Edite o seguinte programa no editor. /* nota.c: le a nota de um aluno e verifica se ele foi aprovado ou reprovado */ #include <stdio.h> #include <conio.h> float nota; char nome[20]; int main() { printf ( \nqual eh seu nome? ); gets(nome); printf ( \ndigite sua nota final: ); scanf( %f,&nota); if (nota >= 6.0) printf ( \n%s, voce foi aprovado!,nome); else printf ( \n%s, voce foi reprovado...,nome); printf( \n\nfim do programa. ); getch(); return 0; 6. A qualquer momento que desejar, salve o seu arquivo. Clique em <Arquivo> <Salvar Como>. Vá para o diretório E:\EXECUTAVEIS LIBERADOS\seunome e salve seu arquivo como nota.c e vá salvando seu programa enquanto edita. 7. Compile e execute seu programa. Conserte os erros que o compilador apontar antes de executar. Clique em <Executar> <Compilar&Executar> Execute o programa várias vezes para diferentes valores. 128

124 Algoritmos e Linguagem de Programação 8. Edite o programa C a seguir, salve-o, compile-o e execute-o seguindo os passos ensinados no programa anterior. Para abrir um arquivo novo: <Arquivo> <Novo><Arquivo Fonte>. Salve seu arquivo como menor.c. /* menor.c: Este programa seleciona o menor numero em uma sequencia de numeros inteiros */ #include <stdio.h> #include <conio.h> int valor, menor; int main () { printf ( \ndigite um numero inteiro: ); scanf ( %i, &valor); menor = valor; while (valor!= -1) { if (valor < menor) menor = valor; printf( \ndigite um numero inteiro ( 1 para terminar): ); scanf ( %i, &valor); printf ( \no menor valor lido foi: %i, menor); printf( \n\nfim do programa ); getch(); return 0; 129

125 9 CONSIDERAÇÕES FINAIS E chegamos ao final deste curso básico de Algoritmos e Linguagem de Programação C! Espero que você, aluno(a), já esteja conseguindo fazer seus primeiros programas de computador nessa linguagem tão moderna, avançada e instigante, que é a linguagem C. De acordo com nossa metodologia, você aprendeu a escrever os primeiros algoritmos utilizando o PortuCê, uma pseudolinguagem que o(a) ajudou a quebrar a primeira barreira da linguagem C, que são seus comandos escritos em inglês. Rapidamente passamos à tradução desses algoritmos para a linguagem-alvo e, em seguida, já pudemos ir para o computador fazer nossos primeiros testes. Espero que você não pare por aqui, caro(a) aluno(a). Há muitos problemas do mundo real que esperam por soluções automatizadas. O desafio é grande, mas sua capacidade de aprendizado e de superação é maior ainda! Como falamos no capítulo inicial, a linguagem C inspirou e foi a base de plataformas e linguagens de programação modernas e atuais, como o Java e o C#. Assim, você já tem a base para encarar desafios maiores e se tornar um grande desenvolvedor. A gente se encontra, então, no mundo profissional da nossa área, trocando informações, aprendendo juntos e trabalhando bastante, pois o mercado profissional é amplo e vasto e conta conosco! Qualquer dúvida, entre em contato por comigo: 131

126 RESPOSTAS COMENTADAS DAS ATIVIDADES PROPOSTAS Caro(a) aluno(a), aqui você encontrará respostas de uma parte dos exercícios das atividades propostas. Você deve tentar fazer sozinho(a) primeiramente, antes de olhar a resposta. Os outros exercícios você já tem condições de resolver sem ajuda, mas, caso restem dúvidas, use os chats e fóruns para solicitar a ajuda de seu professor! Boa sorte! Capítulo 1 1. Qual o padrão de comportamento utilizado para gerar as sequências: 1, 5, 9, 13, 17, 21, A série de números começa com 1 (primeiro termo); Para se gerar qualquer um dos outros termos da série, basta somar 4 ao número imediatamente anterior; Esta é uma série infinita. Seu fim deve ser determinado por uma condição do tipo gerar os 10 primeiros termos da série ou gerar todos os termos da série menores que , 1, 2, 3, 5, 8, 13, 21, A série de números começa com 1 (primeiro termo); O segundo termo também é 1; Para se gerar qualquer um dos outros termos da série, basta somar os dois termos imediatamente anteriores: Exemplos: 1 (primeiro termo) + 1 (segundo termo) =2 (terceiro termo) 1 (segundo termo) + 2 (terceiro termo) = 3 (quarto termo) 2 (terceiro termo) + 3 (quarto termo) = 5 (quinto termo) Esta é uma série infinita, conhecida como série de Fibonacci. Seu fim deve ser determinado por uma condição do tipo gerar os 10 primeiros termos da série ou gerar todos os termos da série menores que

127 Elisamara de Oliveira Capítulo 3 1. O exercício pede que você escreva um algoritmo que leia e imprima o nome e as duas notas de um aluno. Para a solução desse problema, são necessárias apenas 3 variáveis: uma para o nome do aluno, uma para a nota da prova 1 e outra para a nota da prova 2. O nome é uma cadeia de caracteres e as notas são do tipo real, pois o aluno pode tirar uma nota 7.5, por exemplo. Veja a solução completa, analise e reflita. Caso haja dúvidas, participe dos chats e dos fóruns com seu professor! /* notas.c: programa que le e imprime 2 notas */ caractere nome[20]; real nota1, nota2; principal() { imprima ( Qual eh o seu nome? ); leia ( %s,nome); imprima ( Digite a primeira nota do aluno: ); leia ( %f,&nota1); imprima ( Digite a segunda nota do aluno: ); leia( %f,&nota2); imprima ( %s, sua 1a nota foi: %1.2f e a sua 2a nota foi: %1.2f, nome,nota1,nota2); imprima ( Fim do programa ); 2. Você deve escrever apenas o comando que calcule a média das duas notas lidas no exercício anterior. Isso é simples: basta somar as duas notas e dividir a soma por 2. Observe os parênteses envolvendo a soma das duas notas! media = (nota1 + nota2) / 2; 3. Você deve escrever um comando que verifique se a média calculada no exercício anterior é maior ou igual a 7. Para isso, você deve usar o comando condicional se. Caso a média seja superior ou igual a 7, vamos imprimir uma frase dizendo que o aluno foi aprovado, caso contrário, imprimimos uma frase dizendo que foi reprovado. Veja a solução: se (media >= 7.0) imprima ( Voce foi aprovado! ); senão imprima ( Voce foi reprovado... ); 134

128 Algoritmos e Linguagem de Programação 4. Aqui você deve acrescentar ao algoritmo inicial os comandos para cálculo da média e critérios de aprovação! Dessa maneira, a solução fica completa. Você terá escrito um algoritmo que lê o nome e as duas notas de um aluno, calcula a média das notas e imprime uma frase dizendo se ele foi aprovado (média maior ou igual a 7.0) ou reprovado. /* media.c: programa que calcula a media de 2 notas e verifica a aprovacao do aluno */ caractere nome[20]; real nota1, nota2, media; principal() { imprima ( Qual eh o seu nome? ); leia ( %s,nome); imprima ( Digite a primeira nota do aluno: ); leia ( %f,&nota1); imprima ( Digite a segunda nota do aluno: ); leia( %f,&nota2); media = (nota1 + nota2) / 2; se (media >= 7.0) imprima ( %s voce foi aprovado!,nome); senão imprima ( %s voce foi reprovado..., nome); imprima( Fim do programa ); 5. Vamos repetir o trecho de comandos se aninhado e depois resolver cada uma das situações propostas. Observe, nesse trecho, que temos apenas 2 comandos: um comando se que possui outros comandos se dentro dele e o comando C5, ou seja, o comando C5 está fora do ninho de comandos se, por isso, será sempre executado, independentemente dos valores de B1, B2 e B3! 135

129 Elisamara de Oliveira a) Se B1 é verdadeiro, o comando C1 do primeiro se será executado e o ninho de comandos se será finalizado (lembre-se que o senão não poderá ser executado, pois a condição se B1 foi avaliada como verdadeira!). Finalizado o ninho de comandos se, o próximo comando a ser executado é o C5. Resposta: C1 e C5 b) Se B1 é falso, o senão do primeiro se será executado e a condição do segundo comando se será avaliada. Como B2 é verdadeiro, o segundo se será executado e a condição do terceiro comando se será avaliada. Como B3 é falso, o senão do terceiro se será executado, ou seja, os comandos C3 e C4 serão executados e o ninho de comandos se será finalizado. Finalizado o ninho de comandos se, o próximo comando a ser executado é o C5. Resposta: C3, C4 e C5 c) Se B1 é falso, o senão do primeiro se será executado e a condição do segundo comando se será avaliada. Como B2 é verdadeiro, o segundo se será executado e a condição do terceiro comando se será avaliada. Como B3 é verdadeiro, o comando C2 do terceiro se será executado e o ninho de comandos se será finalizado. Finalizado o ninho de comandos se, o próximo comando a ser executado é o C5. Resposta: C2 e C5 d) Se B1 é falso, o senão do primeiro se será executado e a condição do segundo comando se será avaliada. Como B2 é falso e não existe o senão do segundo se, o ninho de comandos se será finalizado. Finalizado o ninho de comandos se, o único comando a ser executado é o C5! Resposta: B1 = Falso, B2= Falso e B3 não precisa ser definido. 6. Dado um conjunto de respostas sim ou não de várias pessoas e seu sexo (F=feminino, M=masculino), você deve escrever comandos em PortuCê para calcular: a) o número de mulheres que responderam SIM se (sexo == F e resposta == sim ) ContMulSim = ContMulSim + 1; b) o número de homens que responderam NÃO se (sexo == M e resposta == nao ) ContMulSim = ContMulSim + 1; 136

130 c) o número de mulheres e homens que responderam NÃO se (resposta == nao ) ContNao = ContNao + 1; Algoritmos e Linguagem de Programação Atenção! Todos os contadores utilizados nos trechos de algoritmo devem ser previamente inicializados com 0 (zero). As comparações com F, M, sim e nao só vão funcionar se o usuário, é claro, escrever as respostas exatamente dessa forma. Se o programador quiser que o programa aceite outros tipos de grafia envolvendo letras maiúsculas e minúsculas, isso deve ser incluído no código. Por exemplo, para aceitar F ou f, o trecho da letra a ficaria assim: se ( (sexo== F ou sexo== f ) e (resposta== sim ou resposta= SIM ) ) 7. Qual o valor de L após a execução desse algoritmo? Após a inicialização das variáveis, a condição do comando se deve ser avaliada. Como esta não é uma condição simples, vamos analisá-la por partes, lembrando que 0 é avaliado como Falso e qualquer outro valor é avaliado como Verdadeiro. C é Falso (X+Y > 5) é ( = > 5?) como 4.7 não é maior que 5, o resultado é Falso. O resultado da expressão fica assim: Falso ou Falso ou Verdadeiro que é Verdadeiro! Como a condição do comando se foi avaliada como verdadeira, o comando L=0 será executado e o algoritmo será finalizado! Resposta: L=0 137

131 Elisamara de Oliveira 8. Você deve escrever os trechos de algoritmo em PortuCê que ajudem o IBGE a fazer o censo populacional de certa cidade, sabendo-se que os seguintes dados foram pedidos aos cidadãos: SEXO ( H = homem, M = mulher) e RENDA (número de salários-mínimos sm). Vamos à solução dos trechos de algoritmo: a) o total de homens se (sexo == H ou sexo == h ) ++conthomens; b) o total de mulheres se (sexo == M ou sexo == m ) ++contmulheres; c) o total de pessoas da classe C (até 4 sm), da classe B (até 20 sm) e da classe A (acima de 20 sm) se (renda <= 4) ++contclassec; senão se (renda <= 20) ++contclasseb; senão ++contclassea; O trecho da letra c pode ser escrito em 3 comandos se separados. Você deve escolher aquele que você considera mais fácil de entender para usar, ok? Ficaria assim: se (renda<= 4) ++contclassec; se (renda > 4 e renda <= 20) ++contclasseb; se (Renda > 20) ++contclassea; Atenção! Todos os contadores utilizados nos trechos de algoritmo devem ser previamente inicializados com 0 (zero). 138

132 Algoritmos e Linguagem de Programação 9. Fornecidos os dados das candidatas a modelo, você deve escrever um trecho de algoritmo para verificar se os dados se enquadram nos seguintes limites: ALTURA: de 1.70 a 1.85 m, PESO: de 48.0 a 60.0 Kg e IDADE: de 17 a 21 anos. Se os dados da candidata corresponderem aos limites anteriores, deve ser impressa uma frase dizendo que ela foi aprovada, caso contrário, que não foi aprovada. É muito simples, basta checar cada um dos quesitos num único comando se, unindo-os pelo operador lógico e. O uso do e indica que, somente se todos os quesitos forem verdadeiros, a candidata será aprovada. se ( (altura >= 1.70 e altura <= 1.85) e (peso >= 48 e peso <= 60) e (idade >=17 e idade <= 21) ) imprima( Candidata aprovada ); senão imprima( Candidata reprovada ); 10. Você deve modificar o exercício anterior para que uma frase seja impressa após a verificação de cada quesito dizendo se a candidata foi aprovada ou não em cada um deles e uma frase final dizendo se foi aprovada ou não como modelo. Observe a estratégia que eu utilizei para saber se a candidata foi reprovada em algum quesito: eu usei uma variável inteira que funciona como uma variável lógica aprovada. Essa variável foi inicializada com verdadeiro (1) e somente no caso de algum quesito ser reprovado, ou seja, no caso de algum senão ser executado, essa variável passaria a ter o valor falso (0), indicando a reprovação da candidata. Mas existem outras soluções, claro. Uma delas foi criada por um aluno que usou um contador: cada vez que um quesito era aprovado, ele somava 1 ao contador; no final, se o contador fosse igual a 3, a candidata estaria aprovada, caso contrário, teria sido reprovada. aprovada = 1; se (altura >= 1.70 e altura <= 1.85) imprima ( quesito altura aprovado! ); senão { imprima ( reprovada no quesito altura ); aprovada = 0; se (peso >=48 e peso <=60) imprima( quesito peso aprovado! ) senão { imprima( reprovada no quesito peso. ); aprovada = 0; se (idade >=17 e idade <= 21) imprima( quesito idade aprovado! ) senão { imprima( reprovada no quesito idade ); aprovada = 0; se (aprovada) imprima( Candidata aprovada ); senão imprima( Candidata reprovada ); 139

133 Elisamara de Oliveira Capítulo 4 1. Passo 1: ler e entender Passo 2: variáveis de entrada - comprimento - largura Passo 3: variáveis de saída - área da sala - perímetro da sala Passo 4: variáveis auxiliares - não tem Passo 5: declarar todas as variáveis real compr, larg, area, perimetro; Passo 6: inicializar as variáveis imprima ( Digite o comprimento da sala: ); leia( %f, &compr); imprima ( Digite a largura da sala: ); leia( %f, &larg); Passo 7: calcular as saídas area = compr * larg; perimetro = (2*compr) + (2*larg); Passo 8: imprimir os resultados imprima( A sala tem %f de area e %f de perimetro, area, perimetro); Passo 9: montar o algoritmo /*Exerc411.c: Le o comprimento e a largura de uma sala e calcula sua area e perimetro*/ real compr, larg, area, perimetro; principal () { imprima ( Digite o comprimento da sala: ); leia( %f, &compr); imprima ( Digite a largura da sala: ); leia( %f, &larg); area = compr * larg; perimetro = (2*compr) + (2*larg); imprima( A sala tem %f de area e %f de perimetro, area, 140

134 Algoritmos e Linguagem de Programação perimetro); imprima( Fim do programa ); Passo 10: testes de mesa compr larg area perimetro Saída Tela A sala tem 12.5 de area e 10.0 de perimetro compr larg area perimetro Saída Tela A sala tem 0 de area e -2.0 de perimetro Nesses dois testes de mesa, podemos observar um comportamento esperado para dados válidos e um comportamento estranho para dados não esperados. O certo seria fazer uma consistência dos dados, já que não faz sentido ter valores negativos nem o valor zero para o comprimento e largura das paredes de uma sala, mas isso não é importante agora. O importante, caro(a) aluno(a0, é você conseguir encontrar a solução sem se preocupar com usuários, digamos, pouco honestos. 3. Passo 1: ler e entender Passo 2: variáveis de entrada - valor em dólares - cotação do dólar Passo 3: variáveis de saída - valor em reais Passo 4: variáveis auxiliares - não tem Passo 5: declarar todas as variáveis real dolares, reais, cotacao; Passo 6: inicializar as variáveis imprima ( Digite o valor em dolares a ser convertido para reais: ); leia( %f, &dolares); imprima ( Digite a cotacao do dolar: ); leia( %f, &cotacao); Passo 7: calcular as saídas reais = dolares*cotacao; 141

135 Elisamara de Oliveira Passo 8: imprimir os resultados imprima( O valor %f em dolares corresponde a R$ %f, dolares, reais); Passo 9: montar o algoritmo /*Exerc413.c: Le o valor em dolares e a cotacao do dolar e calcula o valor convertido para reais*/ real dolares, reais, cotacao; principal () { imprima ( Digite o valor em dolares a ser convertido para reais: ); leia( %f, &dolares); imprima ( Digite a cotacao do dolar: ); leia( %f, &cotacao); reais = dólares*cotacao; imprima( O valor %f em dolares corresponde a R$ %f, dolares, reais); imprima( Fim do programa ); Passo 10: testes de mesa dolares cotacao reais Saída Tela O valor em dólares corresponde a R$ dolares cotacao reais Saída Tela O valor em dólares corresponde a R$ Passo 1: ler e entender Passo 2: variáveis de entrada - v0 - ângulo θ 142

136 Algoritmos e Linguagem de Programação Passo 3: variáveis de saída - S, que é o alcance do projétil Passo 4: variáveis auxiliares - g, que é a gravidade Passo 5: declarar todas as variáveis real v0, teta, g, S; Passo 6: inicializar as variáveis imprima ( Digite o valor de v0: ); leia( %f, &v0); imprima ( Digite o angulo teta em radianos: ); leia( %f, &teta); g = 9.8; Passo 7: calcular as saídas Aqui, algo importante seria saber qual operador do PortuCê calcula o seno de um ângulo. Nesse caso, você teria que perguntar ao seu professor, mas aqui vai a dica: a função que calcula o seno é sin(angulo_em_radianos) e o ângulo deve estar em radianos! S = ((v0 * v0) / g) * sin (2*teta); Passo 8: imprimir os resultados imprima( O alcance do projetil eh %f, S); Passo 9: montar o algoritmo /*Exerc417.c: Le o valor de v0 e do ângulo e calcula o alcance de um projetil*/ real v0, teta, g, S; principal () { imprima ( Digite o valor de v0: ); leia( %f, &v0); imprima ( Digite o angulo teta em radianos: ); leia( %f, &teta); g = 9.8; S = ((v0 * v0) / g) * sin (2*teta); imprima( O alcance do projetil eh %f, S); imprima( Fim do programa ); 143

137 Elisamara de Oliveira Passo 10: testes de mesa Para procedermos ao teste de mesa, primeiramente, temos que recorrer aos valores do seno, dados os ângulos mais comuns, mas, para facilitar a nossa vida, seguem os valores nas tabelas a seguir, considerando que π ou Pi = 3.14 e que Pi corresponde a um ângulo de 180 graus: v0 teta g S Saída Tela O alcance do projetil eh 0 v0 teta g S Saída Tela O alcance do projetil eh Passo 1: ler e entender Passo 2: variáveis de entrada - preço do produto Passo 3: variáveis de saída - desconto - preço final com desconto Passo 4: variáveis auxiliares - não tem Passo 5: declarar todas as variáveis real precoini, desconto, precofinal; Passo 6: inicializar as variáveis imprima ( Digite o valor do produto ); leia( %f, &precoini); 144

Programação em Linguagem C

Programação em Linguagem C Bacharelado em Sistemas de Informação Programação em Linguagem C Parte 1 (básico) Profa. Dra. Elisamara de Oliveira Índice 2 Capítulo 1... 4 O Conceito de Algoritmo... 4 1.1. O que é um algoritmo?... 4

Leia mais

Programação Elementar de Computadores Jurandy Soares

Programação Elementar de Computadores Jurandy Soares Programação Elementar de Computadores Jurandy Soares Básico de Computadores Computador: dispositivos físicos + programas Dispositivos físicos: hardware Programas: as instruções que dizem aos dispositivos

Leia mais

A lógica de programação ajuda a facilitar o desenvolvimento dos futuros programas que você desenvolverá.

A lógica de programação ajuda a facilitar o desenvolvimento dos futuros programas que você desenvolverá. INTRODUÇÃO A lógica de programação é extremamente necessária para as pessoas que queiram trabalhar na área de programação, seja em qualquer linguagem de programação, como por exemplo: Pascal, Visual Basic,

Leia mais

CURSO TÉCNICO EM PROCESSAMENTO DE DADOS

CURSO TÉCNICO EM PROCESSAMENTO DE DADOS CURSO TÉCNICO EM PROCESSAMENTO DE DADOS APOSTILA DE LÓGICA DE PROGRAMAÇÃO CAP Criação de Algoritmos e Programas PROFESSOR RENATO DA COSTA Não estamos aqui para sobreviver e sim para explorar a oportunidade

Leia mais

Linguagens de programação

Linguagens de programação Prof. André Backes Linguagens de programação Linguagem de Máquina Computador entende apenas pulsos elétricos Presença ou não de pulso 1 ou 0 Tudo no computador deve ser descrito em termos de 1 s ou 0 s

Leia mais

Aula 4 Pseudocódigo Tipos de Dados, Expressões e Variáveis

Aula 4 Pseudocódigo Tipos de Dados, Expressões e Variáveis 1. TIPOS DE DADOS Todo o trabalho realizado por um computador é baseado na manipulação das informações contidas em sua memória. Estas informações podem ser classificadas em dois tipos: As instruções, que

Leia mais

PC Fundamentos Revisão 4

PC Fundamentos Revisão 4 exatasfepi.com.br PC Fundamentos Revisão 4 André Luís Duarte...mas os que esperam no Senhor renovarão as suas forças; subirão com asas como águias; correrão, e não se cansarão; andarão, e não se fatigarão.is

Leia mais

e à Linguagem de Programação Python

e à Linguagem de Programação Python Introdução a Algoritmos, Computação Algébrica e à Linguagem de Programação Python Curso de Números Inteiros e Criptografia Prof. Luis Menasché Schechter Departamento de Ciência da Computação UFRJ Agosto

Leia mais

Introdução à Lógica de Programação

Introdução à Lógica de Programação Sistemas Operacionais e Introdução à Programação Introdução à Lógica de Programação 1 Estruturas de dados Representação computacional das informações do problema ser resolvido Informações podem ser de

Leia mais

Algoritmos em Javascript

Algoritmos em Javascript Algoritmos em Javascript Sumário Algoritmos 1 O que é um programa? 1 Entrada e Saída de Dados 3 Programando 4 O que é necessário para programar 4 em JavaScript? Variáveis 5 Tipos de Variáveis 6 Arrays

Leia mais

Algoritmos Computacionais ( Programas )

Algoritmos Computacionais ( Programas ) Algoritmos Computacionais ( Programas ) A partir deste tópico, consideramos a utilização do universo Computacional na solução de problemas. Para tanto devemos lembrar que a transposição de problemas do

Leia mais

Edwar Saliba Júnior. Dicas, Comandos e Exemplos Comparativos entre Linguagem Algorítmica e Linguagem C

Edwar Saliba Júnior. Dicas, Comandos e Exemplos Comparativos entre Linguagem Algorítmica e Linguagem C Edwar Saliba Júnior Dicas, Comandos e Exemplos Comparativos entre Linguagem Algorítmica e Linguagem C Belo Horizonte 2010 Sumário 1 Nota:... 2 2 Comandos e Palavras Reservadas:... 3 3 Dicas... 4 3.1 Strings

Leia mais

Introdução à Lógica de Programação

Introdução à Lógica de Programação Introdução à Lógica de Programação Sistemas Numéricos As informações inseridas em um computador são traduzidos em dados, ou seja, em sinais que podem ser manipulados pelo computador. O computador trabalha

Leia mais

Universidade Federal de Uberlândia Faculdade de Computação. Conceitos básicos de algoritmos

Universidade Federal de Uberlândia Faculdade de Computação. Conceitos básicos de algoritmos Universidade Federal de Uberlândia Faculdade de Computação Conceitos básicos de algoritmos Prof. Renato Pimentel 1 Computação Dados Informações vindas de usuários ou de outras máquinas; Processamento transformação

Leia mais

Algoritmos e Programação de Computadores

Algoritmos e Programação de Computadores Algoritmos e Programação de Computadores Algoritmos Estrutura Sequencial Parte 1 Professor: Victor Hugo L. Lopes Agenda Etapas de ação do computador; TDP Tipos de Dados Primitivos; Variáveis; Constantes;

Leia mais

Resumo da Matéria de Linguagem de Programação. Linguagem C

Resumo da Matéria de Linguagem de Programação. Linguagem C Resumo da Matéria de Linguagem de Programação Linguagem C Vitor H. Migoto de Gouvêa 2011 Sumário Como instalar um programa para executar o C...3 Sintaxe inicial da Linguagem de Programação C...4 Variáveis

Leia mais

Desenvolvido por: Juarez A. Muylaert Filho - jamf@estacio.br Andréa T. Medeiros - andrea@iprj.uerj.br Adriana S. Spallanzani - spallanzani@uol.com.

Desenvolvido por: Juarez A. Muylaert Filho - jamf@estacio.br Andréa T. Medeiros - andrea@iprj.uerj.br Adriana S. Spallanzani - spallanzani@uol.com. UAL é uma linguagem interpretada para descrição de algoritmos em Português. Tem por objetivo auxiliar o aprendizado do aluno iniciante em programação através da execução e visualização das etapas de um

Leia mais

Apostila Básica de Lógica e Programação para Game Maker por Giosepe Luiz 1

Apostila Básica de Lógica e Programação para Game Maker por Giosepe Luiz 1 Apostila Básica de Lógica e Programação para Game Maker por Giosepe Luiz 1 Sumário 1. Introdução a Lógica... 03 2. Verdadeiro e Falso... 03 3. Conectivo E e OU... 03 4. Negação... 04 5. Introdução a Programação...

Leia mais

PROGRAMAÇÃO DE COMPUTADORES (Teoria)

PROGRAMAÇÃO DE COMPUTADORES (Teoria) PC PROGRAMAÇÃO DE COMPUTADORES (Teoria) Aula 01 Prof. Ricardo Veras (prof.rveras@gmail.com) ALGORITMOS "Seqüência ordenada de passos, que deve ser seguida para a realização de um tarefa" "Algoritmo é um

Leia mais

2. OPERADORES... 6 3. ALGORITMOS, FLUXOGRAMAS E PROGRAMAS... 8 4. FUNÇÕES... 10

2. OPERADORES... 6 3. ALGORITMOS, FLUXOGRAMAS E PROGRAMAS... 8 4. FUNÇÕES... 10 1. TIPOS DE DADOS... 3 1.1 DEFINIÇÃO DE DADOS... 3 1.2 - DEFINIÇÃO DE VARIÁVEIS... 3 1.3 - VARIÁVEIS EM C... 3 1.3.1. NOME DAS VARIÁVEIS... 3 1.3.2 - TIPOS BÁSICOS... 3 1.3.3 DECLARAÇÃO DE VARIÁVEIS...

Leia mais

1 - Processamento de dados

1 - Processamento de dados Conceitos básicos sobre organização de computadores 2 1 - Processamento de dados O que é processamento? O que é dado? Dado é informação? Processamento é a manipulação das informações coletadas (dados).

Leia mais

MC102 Algoritmos e Programação de Computadores 2ª Aula Programa, entrada e saída de dados

MC102 Algoritmos e Programação de Computadores 2ª Aula Programa, entrada e saída de dados MC102 Algoritmos e Programação de Computadores 2ª Aula Programa, entrada e saída de dados 1. Objetivos Falar sobre programa de computador, diferenciando programa em linguagem de máquina, de programa em

Leia mais

Jaime Evaristo Sérgio Crespo. Aprendendo a Programar Programando numa Linguagem Algorítmica Executável (ILA)

Jaime Evaristo Sérgio Crespo. Aprendendo a Programar Programando numa Linguagem Algorítmica Executável (ILA) Jaime Evaristo Sérgio Crespo Aprendendo a Programar Programando numa Linguagem Algorítmica Executável (ILA) Segunda Edição Capítulo 2 Versão 08042010 2. Introdução à Linguagem Algorítmica 2.1 Variáveis

Leia mais

Lógica de Programação PROF. FLÁVIO IZO

Lógica de Programação PROF. FLÁVIO IZO Lógica de Programação PROF. FLÁVIO IZO Dúvidas! FLÁVIO IZO (28) 99986-5273 (somente urgência) fizo@ifes.edu.br APRESENTAÇÃO DA DISCIPLINA Objetivos 1.0 Apresentações: Área que mais gosta? 2.0 Ementa; 3.0

Leia mais

Linguagem algorítmica: Portugol

Linguagem algorítmica: Portugol Programação de Computadores I Aula 03 Linguagem algorítmica: Portugol José Romildo Malaquias Departamento de Computação Universidade Federal de Ouro Preto 2011-1 1/34 Introdução I Lógica A lógica é usada

Leia mais

Algoritmos com VisuAlg

Algoritmos com VisuAlg Algoritmos com VisuAlg Prof Gerson Volney Lagemann Depto Eng de Produção e Sistemas UDESC - CCT Algoritmos com VisuAlg Introdução A linguagem VisuAlg é simples, seu objetivo é disponibilizar um ambiente

Leia mais

Aula 01: Linguagens de Programação e Introdução ao Visual C# Express

Aula 01: Linguagens de Programação e Introdução ao Visual C# Express Aula 01: Linguagens de Programação e Introdução ao Visual C# Express EMENTA: Introdução ao Visual C#. Fundamentos da Linguagem. Estruturas de decisão e repetição. Modularização de Programas: Funções. Arrays

Leia mais

Algoritmos e Programação. Prof. Tarcio Carvalho

Algoritmos e Programação. Prof. Tarcio Carvalho Algoritmos e Programação Prof. Tarcio Carvalho Conceito de Lógica A utilização da lógica na vida do indivíduo é constante, visto que é ela quem possibilita a ordenação do pensamento humano. Exemplo: A

Leia mais

Capítulo 2: Introdução à Linguagem C

Capítulo 2: Introdução à Linguagem C Capítulo 2: Introdução à Linguagem C INF1005 Programação 1 Pontifícia Universidade Católica Departamento de Informática Programa Programa é um algoritmo escrito em uma linguagem de programação. No nosso

Leia mais

ESTRUTURA DE UM PROGRAMA EM C++ Estrutura de um Programa em C++

ESTRUTURA DE UM PROGRAMA EM C++ Estrutura de um Programa em C++ ESTRUTURA DE UM PROGRAMA EM C++ Estrutura de um Programa em C++ #include { Este trecho é reservado para o corpo da função, com a declaração de suas variáveis locais, seus comandos e funções

Leia mais

Introdução a lógica de programação. Aula 02: Linguagens de Programação e Introdução ao Visual C# Express

Introdução a lógica de programação. Aula 02: Linguagens de Programação e Introdução ao Visual C# Express Introdução a lógica de programação Aula 02: Linguagens de Programação e Introdução ao Visual C# Express Roteiro da aula Linguagem de Programação Visual C#: Introdução a C# através de comandos de entrada

Leia mais

AULA 2: INTRODUÇÃO A LINGUAGEM DE C. Curso: Ciência da Computação Profª.: Luciana Balieiro Cosme

AULA 2: INTRODUÇÃO A LINGUAGEM DE C. Curso: Ciência da Computação Profª.: Luciana Balieiro Cosme AULA 2: INTRODUÇÃO A LINGUAGEM DE C Curso: Ciência da Computação Profª.: Luciana Balieiro Cosme Agenda Introdução a linguagem C Compiladores Variáveis IDEs Exemplos Exercícios Introdução A Linguagem C

Leia mais

Programação de Computadores

Programação de Computadores Programação de Computadores Curso Engenharia Civil Modalidade Superior Professora Michelle Nery Agenda Introdução a Programação Algoritmos VS Programa 2 Algoritmos Um algoritmo pode ser definido como uma

Leia mais

Vetores. Vetores. Figura 1 Exemplo de vetor com 10 elementos

Vetores. Vetores. Figura 1 Exemplo de vetor com 10 elementos Vetores Nos capítulos anteriores estudamos as opções disponíveis na linguagem C para representar: Números inteiros em diversos intervalos. Números fracionários com várias alternativas de precisão e magnitude.

Leia mais

Resumo da Introdução de Prática de Programação com C. A Linguagem C

Resumo da Introdução de Prática de Programação com C. A Linguagem C Resumo da Introdução de Prática de Programação com C A Linguagem C O C nasceu na década de 70. Seu inventor, Dennis Ritchie, implementou-o pela primeira vez usando um DEC PDP-11 rodando o sistema operacional

Leia mais

Programação 1. Rafael Vargas Mesquita. http://www.ci.ifes.edu.br ftp://ftp.ci.ifes.edu.br/informatica/mesquita/

Programação 1. Rafael Vargas Mesquita. http://www.ci.ifes.edu.br ftp://ftp.ci.ifes.edu.br/informatica/mesquita/ Programação 1 Rafael Vargas Mesquita http://www.ci.ifes.edu.br ftp://ftp.ci.ifes.edu.br/informatica/mesquita/ Definições Básicas Lógica de programação é a técnica de desenvolver algoritmos (sequências

Leia mais

Disciplina: Organização de computadores

Disciplina: Organização de computadores Disciplina: Organização de computadores Professora: Carolina D. G. dos Santos E-mail: profcarolinadgs@gmail.com Página: profcarolinadgs.webnode.com.br Unip / Prof. a Carolina 1 à Computador Conceitos Básicos

Leia mais

CAPÍTULO 3 - TIPOS DE DADOS E IDENTIFICADORES

CAPÍTULO 3 - TIPOS DE DADOS E IDENTIFICADORES CAPÍTULO 3 - TIPOS DE DADOS E IDENTIFICADORES 3.1 - IDENTIFICADORES Os objetos que usamos no nosso algoritmo são uma representação simbólica de um valor de dado. Assim, quando executamos a seguinte instrução:

Leia mais

Aluísio Eustáquio da Silva

Aluísio Eustáquio da Silva 1 Aluísio Eustáquio da Silva SciLab Programável Material didático usado em aulas de Programação de Computadores, Algoritmos e Lógica de Programação Betim Maio de 2012 2 PROGRAMAÇÃO O SciLab permite que

Leia mais

Capítulo 2: Introdução à Linguagem C

Capítulo 2: Introdução à Linguagem C Capítulo 2: Introdução à Linguagem C Waldemar Celes e Roberto Ierusalimschy 29 de Fevereiro de 2012 1 Ciclo de desenvolvimento O modelo hipotético de computador utilizado no capítulo anterior, embora muito

Leia mais

LÓGICA DE PROGRAMAÇÃO Prof. José Geraldo

LÓGICA DE PROGRAMAÇÃO Prof. José Geraldo LÓGICA DE PROGRAMAÇÃO Prof. José Geraldo 1.1 Introdução A Lógica é forma de organizar os pensamentos e demonstrar o raciocínio de maneira correta. A utilização da lógica é a melhor maneira de solucionar

Leia mais

ALGORITMOS PARTE 01. Fabricio de Sousa Pinto

ALGORITMOS PARTE 01. Fabricio de Sousa Pinto ALGORITMOS PARTE 01 Fabricio de Sousa Pinto Algoritmos: Definição 2 É uma sequência de instruções finita e ordenada de forma lógica para a resolução de uma determinada tarefa ou problema. Algoritmos 3

Leia mais

Microsoft Excel 2003

Microsoft Excel 2003 Associação Educacional Dom Bosco Faculdades de Engenharia de Resende Microsoft Excel 2003 Professores: Eduardo Arbex Mônica Mara Tathiana da Silva Resende 2010 INICIANDO O EXCEL Para abrir o programa Excel,

Leia mais

2 Um Primeiro Programa em C

2 Um Primeiro Programa em C 2 Um Primeiro Programa em C Ronaldo F. Hashimoto, Carlos H. Morimoto e José A. R. Soares OobjetivodessaaulaéintroduzirvocêàlinguagemCemambienteLinux,primeiramentemostrandoasua estrutura, e a seguir com

Leia mais

1 Lógica de Programação

1 Lógica de Programação 1 Lógica de Programação Técnicas de programação Programação Sequencial Programação Estruturada Programação Orientada a Eventos e Objectos 1.1 Lógica A lógica de programação é necessária para pessoas que

Leia mais

Algoritmos DCC 119. Introdução e Conceitos Básicos

Algoritmos DCC 119. Introdução e Conceitos Básicos Algoritmos DCC 119 Introdução e Conceitos Básicos Sumário Sistemas de Numeração Sistemas Computacionais Estrutura de um Computador Digital Sistemas Operacionais Algoritmo Introdução Formas de representação

Leia mais

Java Como Programar, 8/E

Java Como Programar, 8/E Capítulo 2 Introdução aos aplicativos Java Java Como Programar, 8/E (C) 2010 Pearson Education, Inc. Todos os 2.1 Introdução Programação de aplicativo Java. Utilize as ferramentas do JDK para compilar

Leia mais

Introdução à Programação de Computadores

Introdução à Programação de Computadores 1. Objetivos Introdução à Programação de Computadores Nesta seção, vamos discutir os componentes básicos de um computador, tanto em relação a hardware como a software. Também veremos uma pequena introdução

Leia mais

LP II Estrutura de Dados. Introdução e Linguagem C. Prof. José Honorato F. Nunes honorato.nunes@ifbaiano.bonfim.edu.br

LP II Estrutura de Dados. Introdução e Linguagem C. Prof. José Honorato F. Nunes honorato.nunes@ifbaiano.bonfim.edu.br LP II Estrutura de Dados Introdução e Linguagem C Prof. José Honorato F. Nunes honorato.nunes@ifbaiano.bonfim.edu.br Resumo da aula Considerações Gerais Introdução a Linguagem C Variáveis e C Tipos de

Leia mais

Italo Valcy

Italo Valcy <italo@dcc.ufba.br> Programação C Módulo 01 Introdução à linguagem C Italo Valcy www.ieee.org/ufba Italo Valcy Programação em C Licença de uso e distribuição Todo o material aqui disponível pode, posteriormente,

Leia mais

Os objetivos indicados aplicam-se a duas linguagens de programação: C e PHP

Os objetivos indicados aplicam-se a duas linguagens de programação: C e PHP AGRUPAMENTO DE ESCOLAS DE SANTA COMBA DÃO CURSO PROFISSIONAL DE TÉCNICO DE GESTÃO E PROGRAMAÇÃO DE SISTEMAS INFORMÁTICOS 2012-2015 PROGRAMAÇÃO E SISTEMAS DE INFORMAÇÃO MÓDULO 2 Mecanismos de Controlo de

Leia mais

Características do PHP. Começando a programar

Características do PHP. Começando a programar PHP Introdução Olá pessoal. Desculpe o atraso na publicação da aula. Pude perceber pelas respostas (poucas) ao fórum que a realização da atividade do módulo I foi relativamente tranquila. Assistam ao vídeo

Leia mais

UFRPE Prof. Gustavo Callou gcallou@gmail.com

UFRPE Prof. Gustavo Callou gcallou@gmail.com UFRPE Prof. Gustavo Callou gcallou@gmail.com 1 Algoritmos Representação Exercícios Linguagens de Programação Compilador Interpretador Ambiente de Desenvolvimento Python Característica Para que serve Onde

Leia mais

Laboratório de Programação I

Laboratório de Programação I Laboratório de Programação I Introdução à Programação em Visual Basic Fabricio Breve Objetivos Ser capaz de escrever programas simples em Visual Basic Ser capaz de usar os comandos de entrada e saída Familiarizar-se

Leia mais

Algoritmos e Programação (Prática) Profa. Andreza Leite andreza.leite@univasf.edu.br

Algoritmos e Programação (Prática) Profa. Andreza Leite andreza.leite@univasf.edu.br (Prática) Profa. Andreza Leite andreza.leite@univasf.edu.br Introdução O computador como ferramenta indispensável: Faz parte das nossas vidas; Por si só não faz nada de útil; Grande capacidade de resolução

Leia mais

3. INTRODUÇÃO À LINGUAGEM C 3.1. CONCEITOS BÁSICOS. Lógica de Programação

3. INTRODUÇÃO À LINGUAGEM C 3.1. CONCEITOS BÁSICOS. Lógica de Programação Lógica de Programação 3. INTRODUÇÃO À LINGUAGEM C Caro Aluno Vamos iniciar o terceiro capítulo da nossa disciplina. Agora vamos começar a aplicar os conceitos vistos nos capítulos anteriores em uma linguagem

Leia mais

13 Números Reais - Tipo float

13 Números Reais - Tipo float 13 Números Reais - Tipo float Ronaldo F. Hashimoto e Carlos H. Morimoto Até omomentonoslimitamosaouso do tipo inteiro para variáveis e expressões aritméticas. Vamos introduzir agora o tipo real. Ao final

Leia mais

Programação de Computadores

Programação de Computadores Programação de Computadores INTRODUÇÃO AOS ALGORITMOS E À PROGRAMAÇÃO DE COMPUTADORES PARTE 1 Renato Dourado Maia Instituto de Ciências Agrárias Universidade Federal de Minas Gerais Programas e Programação

Leia mais

Dadas a base e a altura de um triangulo, determinar sua área.

Dadas a base e a altura de um triangulo, determinar sua área. Disciplina Lógica de Programação Visual Ana Rita Dutra dos Santos Especialista em Novas Tecnologias aplicadas a Educação Mestranda em Informática aplicada a Educação ana.santos@qi.edu.br Conceitos Preliminares

Leia mais

Sumário. INF01040 Introdução à Programação. Elaboração de um Programa. Regras para construção de um algoritmo

Sumário. INF01040 Introdução à Programação. Elaboração de um Programa. Regras para construção de um algoritmo INF01040 Introdução à Programação Introdução à Lógica de Programação s Seqüenciais Sumário Elaboração de um programa/algoritmo Formas de representação de um algoritmo Elementos manipulados em um programa/algoritmo

Leia mais

Algoritmo e Programação

Algoritmo e Programação Algoritmo e Programação Professor: José Valentim dos Santos Filho Colegiado: Engenharia da Computação Prof.: José Valentim dos Santos Filho 1 Ementa Noções básicas de algoritmo; Construções básicas: operadores,

Leia mais

Para testar seu primeiro código utilizando PHP, abra um editor de texto (bloco de notas no Windows) e digite o código abaixo:

Para testar seu primeiro código utilizando PHP, abra um editor de texto (bloco de notas no Windows) e digite o código abaixo: Disciplina: Tópicos Especiais em TI PHP Este material foi produzido com base nos livros e documentos citados abaixo, que possuem direitos autorais sobre o conteúdo. Favor adquiri-los para dar continuidade

Leia mais

Algoritmo. Linguagem natural: o Ambígua o Imprecisa o Incompleta. Pseudocódigo: o Portugol (livro texto) o Visualg (linguagem) Fluxograma

Algoritmo. Linguagem natural: o Ambígua o Imprecisa o Incompleta. Pseudocódigo: o Portugol (livro texto) o Visualg (linguagem) Fluxograma Roteiro: Conceitos básicos de algoritmo, linguagem, processador de linguagem e ambiente de programação; Aspectos fundamentais da organização e do funcionamento de um computador; Construções básicas de

Leia mais

Apostila de Fundamentos de Programação I. Prof.: André Luiz Montevecchi

Apostila de Fundamentos de Programação I. Prof.: André Luiz Montevecchi Apostila de Fundamentos de Programação I Prof: André Luiz Montevecchi Introdução O mundo atual é dependente da tecnologia O uso intenso de diversos aparatos tecnológicos é parte integrante do nosso dia-a-dia

Leia mais

INTRODUÇÃO À LÓGICA DE PROGRAMAÇÃO. Isac Aguiar isacaguiar.com.br isacaguiar@gmail.com

INTRODUÇÃO À LÓGICA DE PROGRAMAÇÃO. Isac Aguiar isacaguiar.com.br isacaguiar@gmail.com INTRODUÇÃO À LÓGICA DE PROGRAMAÇÃO Isac Aguiar isacaguiar.com.br isacaguiar@gmail.com Objetivos Entender a necessidade de se utilizar uma linguagem formal para construir algoritmos a serem interpretados

Leia mais

INF 1005 Programação I

INF 1005 Programação I INF 1005 Programação I Aula 03 Introdução a Linguagem C Edirlei Soares de Lima Estrutura de um Programa C Inclusão de bibliotecas auxiliares: #include Definição de constantes:

Leia mais

Resolução de problemas e desenvolvimento de algoritmos

Resolução de problemas e desenvolvimento de algoritmos SSC0101 - ICC1 Teórica Introdução à Ciência da Computação I Resolução de problemas e desenvolvimento de algoritmos Prof. Vanderlei Bonato Prof. Cláudio Fabiano Motta Toledo Sumário Análise e solução de

Leia mais

Aula 01. - Bibliografia - Definições - Operadores - Criação de um algoritmo - Exercícios. Algoritmo e Programação. Prof. Fábio Nelson.

Aula 01. - Bibliografia - Definições - Operadores - Criação de um algoritmo - Exercícios. Algoritmo e Programação. Prof. Fábio Nelson. - Bibliografia - Definições - Operadores - Criação de um algoritmo - Exercícios Aula 01 Slide 1 BIBLIOGRAFIA SCHILDT H. C Completo e Total, Makron Books. SP, 1997. Curso de linguagem C da UFMG. ZIVIANI,

Leia mais

DESENVOLVIMENTO DE SOFTWARE

DESENVOLVIMENTO DE SOFTWARE VARIAÁ VEL Antes de iniciarmos os comandos referentes a Banco de Dados, precisamos de uma breve descrição técnica sobre Variáveis que serão uma constante em programação seja qual for sua forma de leitura.

Leia mais

Algoritmos e Programação _ Departamento de Informática

Algoritmos e Programação _ Departamento de Informática 5 TIPOS DE DADOS Todo o trabalho realizado por um computador é baseado na manipulação das informações contidas em sua memória. De um modo geral estas informações podem ser classificadas em dois tipos:

Leia mais

APOSTILA PHP PARTE 1

APOSTILA PHP PARTE 1 APOSTILA PHP PARTE 1 1. Introdução O que é PHP? PHP significa: PHP Hypertext Preprocessor. Realmente, o produto foi originalmente chamado de Personal Home Page Tools ; mas como se expandiu em escopo, um

Leia mais

Programação de Computadores. Professor Ilaim Costa Junior ilaim@ic.uff.br Www.ic.uff.br/~ilaim

Programação de Computadores. Professor Ilaim Costa Junior ilaim@ic.uff.br Www.ic.uff.br/~ilaim Programação de Computadores Professor Ilaim Costa Junior ilaim@ic.uff.br Www.ic.uff.br/~ilaim Roteiro da Aula de Hoje Introdução ao FORTRAN (Parte I) Organização de programas Tipos de dados Variáveis Programação

Leia mais

Centro Federal de Educação Tecnológica da Bahia Curso Excel Avançado Índice

Centro Federal de Educação Tecnológica da Bahia Curso Excel Avançado Índice Índice Apresentação...2 Barra de Título...2 Barra de Menus...2 Barra de Ferramentas Padrão...2 Barra de Ferramentas de Formatação...3 Barra de Fórmulas e Caixa de Nomes...3 Criando um atalho de teclado

Leia mais

Introdução à Programação de Computadores Parte I Componentes Básicos do Computador e de um Programa

Introdução à Programação de Computadores Parte I Componentes Básicos do Computador e de um Programa Introdução à Programação de Computadores Parte I Componentes Básicos do Computador e de um Programa Prof. João Henrique Kleinschmidt Material elaborado pelos professores de PI Objetivos Compreender os

Leia mais

Introdução ao FORTRAN (Parte I)

Introdução ao FORTRAN (Parte I) Programação de Computadores III Aula 7 Professor Leandro Augusto Frata Fernandes laffernandes@ic.uff.br Material disponível em http://www.ic.uff.br/~laffernandes/teaching/2011.1/tcc-03.063 Roteiro da Aula

Leia mais

Convertendo Algoritmos para a Linguagem C

Convertendo Algoritmos para a Linguagem C onvertendo Algoritmos para a Linguagem Notas de Aula Prof. Francisco Rapchan www.geocities.com/chicorapchan O objetivo deste texto é mostrar alguns programas em, dando uma breve descrição de seu funcionamento

Leia mais

Introdução a conceitos e a prática de programação

Introdução a conceitos e a prática de programação Instituto de Informática - UFG Disciplina: Introdução à Computação Introdução a conceitos e a prática de programação Autores: Marcelo Akira e Anderson Soares Fevereiro de 2011 Alguns direitos autorais

Leia mais

Lição 1 Introdução à programação de computadores

Lição 1 Introdução à programação de computadores Lição Introdução à programação de computadores Introdução à Programação I Objetivos Ao final desta lição, o estudante será capaz de: Identificar os diferentes componentes de um computador Conhecer linguagens

Leia mais

Desenvolvimento OO com Java 3 Estruturas de Controle e Programação Básica

Desenvolvimento OO com Java 3 Estruturas de Controle e Programação Básica Desenvolvimento OO com Java 3 Estruturas de Controle e Programação Básica Vítor E. Silva Souza (vitor.souza@ufes.br) http://www.inf.ufes.br/~vitorsouza Departamento de Informática Centro Tecnológico Universidade

Leia mais

CURSO DE PROGRAMAÇÃO EM JAVA

CURSO DE PROGRAMAÇÃO EM JAVA CURSO DE PROGRAMAÇÃO EM JAVA Introdução para Iniciantes Prof. M.Sc. Daniel Calife Índice 1 - A programação e a Linguagem Java. 1.1 1.2 1.3 1.4 Linguagens de Programação Java JDK IDE 2 - Criando o primeiro

Leia mais

INTRODUÇÃO ÀS LINGUAGENS DE PROGRAMAÇÃO

INTRODUÇÃO ÀS LINGUAGENS DE PROGRAMAÇÃO Capítulo 1 INTRODUÇÃO ÀS LINGUAGENS DE PROGRAMAÇÃO 1.1 Histórico de Linguagens de Programação Para um computador executar uma dada tarefa é necessário que se informe a ele, de uma maneira clara, como ele

Leia mais

Componentes da linguagem C++

Componentes da linguagem C++ Componentes da linguagem C++ C++ é uma linguagem de programação orientada a objetos (OO) que oferece suporte às características OO, além de permitir você realizar outras tarefas, similarmente a outras

Leia mais

Algoritmos e Fluxogramas

Algoritmos e Fluxogramas Algoritmos e Fluxogramas Lógica de Programação Teoria Introdução Este curso tem o objetivo de desenvolver o que chamamos de lógica de programação em pessoas que queiram ingressar neste mundo ou profissionais

Leia mais

Conceitos Importantes:

Conceitos Importantes: Conceitos Importantes: Variáveis: Por Flávia Pereira de Carvalho, 2007 i O bom entendimento do conceito de variável é fundamental para elaboração de algoritmos, consequentemente de programas. Uma variável

Leia mais

SISTEMAS DIGITAIS Prof. Ricardo Rodrigues Barcelar http://www.ricardobarcelar.com

SISTEMAS DIGITAIS Prof. Ricardo Rodrigues Barcelar http://www.ricardobarcelar.com - Aula 1 - SISTEMA DE NUMERAÇÃO BINÁRIA E DECIMAL Todos os computadores são formados por circuitos digitais, onde as informações e os dados são codificados com dois níveis de tensão, pelo que o seu sistema

Leia mais

Edwar Saliba Júnior. Dicas, Comandos e Exemplos Comparativos entre Linguagem Algorítmica e Linguagem C / C++

Edwar Saliba Júnior. Dicas, Comandos e Exemplos Comparativos entre Linguagem Algorítmica e Linguagem C / C++ Edwar Saliba Júnior Dicas, Comandos e Exemplos Comparativos entre Linguagem Algorítmica e Linguagem C / C++ Belo Horizonte 2009 Sumário 1 Nota:... 2 2 Comandos e Palavras Reservadas:... 3 3 Dicas... 4

Leia mais

O modelo do computador

O modelo do computador O modelo do computador Objetivos: Mostrar como é o funcionamento dos computadores modernos Mostrar as limitações a que estamos sujeitos quando programamos Histórico Os primeiros computadores são da década

Leia mais

Introdução à Programação e Algoritmos. Aécio Costa

Introdução à Programação e Algoritmos. Aécio Costa Aécio Costa Programação é a arte de fazer com que o computador faça exatamente o que desejamos que ele faça. O que é um Programa? Uma seqüência de instruções de computador, para a realização de uma determinada

Leia mais

Algoritmos e Estrutura de Dados. Introdução a Linguagem Python (Parte I) Prof. Tiago A. E. Ferreira

Algoritmos e Estrutura de Dados. Introdução a Linguagem Python (Parte I) Prof. Tiago A. E. Ferreira Algoritmos e Estrutura de Dados Aula 1 Introdução a Linguagem Python (Parte I) Prof. Tiago A. E. Ferreira Linguagem a ser Utilizada? Nossa disciplina é de Algoritmos e Estrutura de Dados, e não de linguagem

Leia mais

Programas simples em C

Programas simples em C Programas simples em C Problema 1. Escreve um programa em C que dados dois inteiros indique se são iguais ou qual o maior. Utilizar a construção em 5 etapas... quais? 1. Perceber o problema 2. Ideia da

Leia mais

INFORMÁTICA APLICADA AULA 02 LINGUAGEM DE PROGRAMAÇÃO C++

INFORMÁTICA APLICADA AULA 02 LINGUAGEM DE PROGRAMAÇÃO C++ UNIVERSIDADE FEDERAL RURAL DO SEMI-ÁRIDO CURSO: Bacharelado em Ciências e Tecnologia INFORMÁTICA APLICADA AULA 02 LINGUAGEM DE PROGRAMAÇÃO C++ Profª ª Danielle Casillo COMPILADORES Toda linguagem de programação

Leia mais

Conceitos básicos da linguagem C

Conceitos básicos da linguagem C Conceitos básicos da linguagem C 2 Em 1969 Ken Thompson cria o Unix. O C nasceu logo depois, na década de 70. Dennis Ritchie, implementou-o pela primeira vez usando o sistema operacional UNIX criado por

Leia mais

Programação Básica em Arduino Aula 2

Programação Básica em Arduino Aula 2 Programação Básica em Arduino Aula 2 Execução: Laboratório de Automação e Robótica Móvel Variáveis são lugares (posições) na memória principal que servem para armazenar dados. As variáveis são acessadas

Leia mais

Sintaxe Básica de Java Parte 1

Sintaxe Básica de Java Parte 1 Sintaxe Básica de Java Parte 1 Universidade Católica de Pernambuco Ciência da Computação Prof. Márcio Bueno poonoite@marcioubeno.com Fonte: Material da Profª Karina Oliveira Estrutura de Programa Um programa

Leia mais

Linguagem e Técnicas de Programação I Operadores, expressões e funções. Prof. MSc. Hugo Souza Material desenvolvido por: Profa.

Linguagem e Técnicas de Programação I Operadores, expressões e funções. Prof. MSc. Hugo Souza Material desenvolvido por: Profa. Linguagem e Técnicas de Programação I Operadores, expressões e funções Prof. MSc. Hugo Souza Material desenvolvido por: Profa. Ameliara Freire Operadores básicos Toda linguagem de programação, existem

Leia mais

Universidade da Beira Interior Cursos: Matemática /Informática e Ensino da Informática

Universidade da Beira Interior Cursos: Matemática /Informática e Ensino da Informática Folha 1-1 Introdução à Linguagem de Programação JAVA 1 Usando o editor do ambiente de desenvolvimento JBUILDER pretende-se construir e executar o programa abaixo. class Primeiro { public static void main(string[]

Leia mais

Universidade Federal do Vale do São Francisco - UNIVASF Colegiado de Engenharia de Computação CECOMP

Universidade Federal do Vale do São Francisco - UNIVASF Colegiado de Engenharia de Computação CECOMP Algoritmos e Programação Ricardo Argenton Ramos Baseado nos slides do professor Jadsonlee da Silva Sá Ementa Conceito de algoritmo. Lógica de programação e programação estruturada. Linguagem de definição

Leia mais

- Aula 1 - ARQUITETURA DE COMPUTADORES

- Aula 1 - ARQUITETURA DE COMPUTADORES - Aula 1 - ARQUITETURA DE COMPUTADORES Em arquitetura de computadores serão estudados aspectos da estrutura e do funcionamento dos computadores. O objetivo é apresentar de forma clara e abrangente a natureza

Leia mais

Curso: Ciência da Computação Disciplina: Construção de Compiladores Período: 2010-1 Prof. Dr. Raimundo Moura

Curso: Ciência da Computação Disciplina: Construção de Compiladores Período: 2010-1 Prof. Dr. Raimundo Moura UFPI CCN DIE Curso: Ciência da Computação Disciplina: Construção de Compiladores Período: 2010-1 Prof. Dr. Raimundo Moura O projeto Desenvolver um compilador de um subconjunto básico da linguagem PORTUGOL.

Leia mais

Conceitos de Linguagens de Programação

Conceitos de Linguagens de Programação Conceitos de Linguagens de Programação Aula 07 Nomes, Vinculações, Escopos e Tipos de Dados Edirlei Soares de Lima Introdução Linguagens de programação imperativas são abstrações

Leia mais