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

Apostila algoritmos

Embed Size (px)

Citation preview

Page 1: Apostila algoritmos

Algoritmos e Linguagem de Programação

Elisamara de Oliveira

Revisada por Clausia Mara Antoneli (janeiro/2013)

Page 2: Apostila algoritmos

APRESENTAÇÃO

É com satisfação que a Unisa Digital oferece a você, aluno(a), esta apostila de Algoritmos e Lingua-gem 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 multidis-ciplinares, como chats, fóruns, aulas web, material de apoio e e-mail.

Para enriquecer o seu aprendizado, você ainda pode contar com a Biblioteca Virtual: www.unisa.br, 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 suple-mento 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

Page 3: Apostila algoritmos

SUMÁRIO

INTRODUÇÃO ............................................................................................................................................... 5

1 ALGORITMOS ........................................................................................................................................... 71.1 O que é um Algoritmo? .................................................................................................................................................71.2 Conceitos Básicos da Programação de Computadores ....................................................................................91.3 Etapas da Programação de Computadores ........................................................................................................121.4 Expressão de Algoritmos ..........................................................................................................................................131.5 Os Algoritmos serão Expressos em Pseudolinguagem .................................................................................181.6 Resumo do Capítulo ....................................................................................................................................................191.7 Atividade Proposta .......................................................................................................................................................19

2 PSEUDOLINGUAGEM DE PROGRAMAÇÃO: PORTUCÊ ............................................. 212.1 Identificadores ...............................................................................................................................................................212.2 Tipos Básicos e Declaração de Variáveis ...............................................................................................................222.3 Comando de Atribuição .............................................................................................................................................232.4 Operadores Aritméticos ............................................................................................................................................242.5 Operadores Lógicos ....................................................................................................................................................252.6 Operadores Relacionais..............................................................................................................................................282.7 Comando Condicional ................................................................................................................................................292.8 Comando de Repetição..............................................................................................................................................312.9 Comandos de Entrada e Saída .................................................................................................................................332.10 Separador de Comandos .......................................................................................................................................372.11 Comentários .................................................................................................................................................................372.12 Bloco de Programa ....................................................................................................................................................382.13 Resumo do Capítulo .................................................................................................................................................41

3 CONSTRUÇÃO DE ALGORITMOS EM PORTUCÊ: PRATICANDO OS COMANDOS E FAZENDO CÁLCULOS .................................................................................... 43

3.1 Declaração de Variáveis – Comandos “leia” e “imprima” ................................................................................433.2 Comando Condicional “se” ........................................................................................................................................443.3 Bloco de Programa .......................................................................................................................................................453.4 Operações Básicas com Números ..........................................................................................................................463.5 Operações com Operadores Lógicos e Relacionais .........................................................................................493.6 Resumo do Capítulo ....................................................................................................................................................513.7 Atividades Propostas ...................................................................................................................................................51

4 METODOLOGIA PARA A CONSTRUÇÃO DE ALGORITMOS ................................... 554.1 Os Passos da Metodologia ........................................................................................................................................554.2 Solução de Exercícios utilizando a Metodologia ..............................................................................................574.3 Resumo do Capítulo ....................................................................................................................................................574.4 Atividades Propostas ...................................................................................................................................................58

Page 4: Apostila algoritmos

5 A LINGUAGEM DE PROGRAMAÇÃO C .................................................................................. 615.1 Tipos Básicos e Declaração de Variáveis em C ...................................................................................................615.2 Operadores de Atribuição, Aritméticos, Relacionais e Lógicos (Binários) em C ..................................625.3 Comando Condicional em C (if) ..............................................................................................................................655.4 Comando de Seleção Múltipla em C (switch) ....................................................................................................685.5 Comando de Repetição em C (while) ....................................................................................................................715.6 Comando de Repetição em C (for) .........................................................................................................................725.7 Comandos de Leitura e Escrita em C ....................................................................................................................765.8 Comentários em C .......................................................................................................................................................795.9 Bloco de Programa em C ..........................................................................................................................................795.10 Funções Úteis em C ...................................................................................................................................................815.11 Tradução de PortuCê para a Linguagem C .......................................................................................................845.12 Resumo do Capítulo .................................................................................................................................................895.13 Atividades Propostas ................................................................................................................................................89

6 USANDO COMANDOS DE REPETIÇÃO EM C ................................................................... 916.1 Comando de Repetição – Entrada Indeterminada de Dados (uso de flags) ..........................................916.2 Comando de Repetição – Entrada de Dados Determinada .........................................................................946.3 Exemplo dos Minutos Telefônicos ..........................................................................................................................966.4 Exemplo do Preço Final de Automóveis ............................................................................................................1006.5 Exemplo da Eleição ....................................................................................................................................................1046.6 Exemplo da Série Numérica ...................................................................................................................................1086.7 Resumo do Capítulo ..................................................................................................................................................1126.8 Atividades Propostas .................................................................................................................................................112

7 OUTROS PROGRAMAS EM C .....................................................................................................119

8 PRÁTICA EM LABORATÓRIO ......................................................................................................1278.1 Estudo Dirigido ........................................................................................................................................................... 127

9 CONSIDERAÇÕES FINAIS .............................................................................................................131

RESPOSTAS COMENTADAS DAS ATIVIDADES PROPOSTAS ...................................133

REFERÊNCIAS ...........................................................................................................................................175

Page 5: Apostila algoritmos

Unisa | Educação a Distância | www.unisa.br5

INTRODUÇÃO

Esta apostila se refere à disciplina Algoritmos e Linguagem de Programação do curso de Engenha-ria 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 ta-refa 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 ba-seia na base 2, que possui apenas 2 algarismos: 0 e 1. Esses dois dígitos binários, ou bits, formam a lingua-gem 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 pre-pare-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

Page 6: Apostila algoritmos

Unisa | Educação a Distância | www.unisa.br7

ALGORITMOS1

Em nosso dia a dia, executamos mecanicamente uma série de ações, que são seguidas sequencial-mente 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:

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.

AtençãoAtençã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.”

Page 7: Apostila algoritmos

Elisamara de Oliveira

Unisa | Educação a Distância | www.unisa.br8

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.

Saiba maisSaiba 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”.

Page 8: Apostila algoritmos

Algoritmos e Linguagem de Programação

Unisa | Educação a Distância | www.unisa.br9

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: http://evotecinformatica.blogspot.com/p/como--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.

Page 9: Apostila algoritmos

Elisamara de Oliveira

Unisa | Educação a Distância | www.unisa.br10

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 ofere-cidas 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 distan-tes 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 con-trapartida, 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 con-tí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.

Page 10: Apostila algoritmos

Algoritmos e Linguagem de Programação

Unisa | Educação a Distância | www.unisa.br11

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 é di-ferente 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.

Page 11: Apostila algoritmos

Elisamara de Oliveira

Unisa | Educação a Distância | www.unisa.br12

�� 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 forma-to ASCii, ou seja, em texto [o arquivo-fonte possui a extensão relativa à linguagem de progra-maçã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 so-bre 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 pro-blema a ser resolvido; escrever um algoritmo em pseudolinguagem para solucionar esse problema; tra-duzir 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 desen-volvimento que pretende:

Page 12: Apostila algoritmos

Algoritmos e Linguagem de Programação

Unisa | Educação a Distância | www.unisa.br13

�� facilitar a escrita;

�� facilitar o entendimento;

�� permitir a verificação;

�� facilitar a alteração e a manutenção dos programas de computador.

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 lin-guagem 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 1980. 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 dispo-siçã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 in-ter-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-

Page 13: Apostila algoritmos

Elisamara de Oliveira

Unisa | Educação a Distância | www.unisa.br14

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 adi-cionais 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 al-gorí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 represen-tar 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).

Page 14: Apostila algoritmos

Algoritmos e Linguagem de Programação

Unisa | Educação a Distância | www.unisa.br15

Figura 5 – Algoritmo expresso através de um fluxograma.

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 pro-gramador, com certeza, mas isso é feito quando o programador já adquiriu bastante experiência de pro-gramação, quer dizer, quando o programador já consegue programar diretamente da linguagem de pro-gramaçã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 exe-cuçã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 hu-mana, 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, lin-guagens para desenvolvimento de software básico, linguagens para utilização intensiva de recursos

Page 15: Apostila algoritmos

Elisamara de Oliveira

Unisa | Educação a Distância | www.unisa.br16

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.

Page 16: Apostila algoritmos

Algoritmos e Linguagem de Programação

Unisa | Educação a Distância | www.unisa.br17

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 am-bos 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 pri-meiras etapas da programação definidas na seção 1.3, quais sejam, identificação de um problema do mun-do 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 pro-gramaçã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 (com-putador);

�� 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 compu-tador (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.

Page 17: Apostila algoritmos

Elisamara de Oliveira

Unisa | Educação a Distância | www.unisa.br18

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 gran-de 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, usa-remos pseudolinguagem para escrever nossos primeiros algoritmos! As justificativas dessa nossa esco-lha 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 progra-maçã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,

Page 18: Apostila algoritmos

Algoritmos e Linguagem de Programação

Unisa | Educação a Distância | www.unisa.br19

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 apren-dizagem, 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 en-contro 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 mo-dernos paradigmas de programação.

1.6 Resumo do Capítulo

1.7 Atividade Proposta

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. Tente deduzir qual o padrão de comportamento utilizado para gerar as sequências:

1, 5, 9, 13, 17, 21, 25 ...1, 1, 2, 3, 5, 8, 13, 21, 34 ...

Page 19: Apostila algoritmos

Unisa | Educação a Distância | www.unisa.br21

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!

PSEUDOLINGUAGEM DE PROGRAMAÇÃO: PORTUCÊ2

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çãoAtençã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.

Page 20: Apostila algoritmos

Elisamara de Oliveira

Unisa | Educação a Distância | www.unisa.br22

Exemplos de identificadores INVÁLIDOS:

4pontos (começa com número)

CUSTO FINAL (tem espaço em branco)

PreçoTotal (caractere “ç” não pode ser usado)

Pessoa+Alta (caractere “+” não pode ser usado)

Preco-caro (caractere “-” não permitido)

Total_dos_salários (palavra acentuada)

inteiro (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 maisSaiba 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)

Page 21: Apostila algoritmos

Algoritmos e Linguagem de Programação

Unisa | Educação a Distância | www.unisa.br23

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çãoAtençã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 = 1275.50;

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 = ‘1275.50’;

(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 :=)

Page 22: Apostila algoritmos

Elisamara de Oliveira

Unisa | Educação a Distância | www.unisa.br24

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éri-co 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 maisSaiba 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)+102.00) - descontoinss;

valoremdolares = salario / 1.85;

impostoderenda = salario * (0.20);

nome = nome + “da silva”;

contador = contador +1;

++contador;

--contador;

raiz = sqrt(numero);

Page 23: Apostila algoritmos

Algoritmos e Linguagem de Programação

Unisa | Educação a Distância | www.unisa.br25

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 *+ 32.50;

(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 maisSaiba 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 operan-dos 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 entendi-mento 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:

Page 24: Apostila algoritmos

Elisamara de Oliveira

Unisa | Educação a Distância | www.unisa.br26

�� 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 en-trada 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);

Page 25: Apostila algoritmos

Algoritmos e Linguagem de Programação

Unisa | Educação a Distância | www.unisa.br27

�� uma função “OU” resulta em 1=VERDADEIRO se, pelo menos, uma das variáveis lógicas de en-trada 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)

Page 26: Apostila algoritmos

Elisamara de Oliveira

Unisa | Educação a Distância | www.unisa.br28

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 maisSaiba 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 “=“)

Page 27: Apostila algoritmos

Algoritmos e Linguagem de Programação

Unisa | Educação a Distância | www.unisa.br29

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çãoAtençã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.

Page 28: Apostila algoritmos

Elisamara de Oliveira

Unisa | Educação a Distância | www.unisa.br30

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 )

Page 29: Apostila algoritmos

Algoritmos e Linguagem de Programação

Unisa | Educação a Distância | www.unisa.br31

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 co-mandos é 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.

Page 30: Apostila algoritmos

Elisamara de Oliveira

Unisa | Educação a Distância | www.unisa.br32

AtençãoAtençã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)

Page 31: Apostila algoritmos

Algoritmos e Linguagem de Programação

Unisa | Educação a Distância | www.unisa.br33

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 pa-rar!)

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 va-riá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 te-clado, 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.

Page 32: Apostila algoritmos

Elisamara de Oliveira

Unisa | Educação a Distância | www.unisa.br34

AtençãoAtençã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” para variáveis do tipo inteiro (integer);•“%f” para variáveis do tipo real (float);•“%c” para variáveis do tipo caractere (único) (character);•“%s” 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 digi-

tado 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; leia(“%i”, &numero);numero = -5;numero = 2002;

real valor; leia(“%f”, &valor);valor = -5.867;valor = 2002.50;

caractere ch; leia(“%c”, ch);ch = ‘5’;ch = ‘s’;ch = ‘#’;

caractere nome[20]; leia(“%s”, nome);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 (“ “)!

Page 33: Apostila algoritmos

Algoritmos e Linguagem de Programação

Unisa | Educação a Distância | www.unisa.br35

AtençãoAtençã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 é im-

pressa 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)

Page 34: Apostila algoritmos

Elisamara de Oliveira

Unisa | Educação a Distância | www.unisa.br36

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 maisSaiba 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ási-co).

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);

Page 35: Apostila algoritmos

Algoritmos e Linguagem de Programação

Unisa | Educação a Distância | www.unisa.br37

Todos os comandos do PortuCê são separados por ponto e vírgula.

2.10 Separador de Comandos

2.11 Comentários

AtençãoAtençã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!)

Os comentários não pertencem às instruções dos algoritmos, mas são úteis para que o programa-dor explique o que está sendo feito.

Saiba maisSaiba 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%

Page 36: Apostila algoritmos

Elisamara de Oliveira

Unisa | Educação a Distância | www.unisa.br38

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.

2.12 Bloco de Programa

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.”);}

Saiba maisSaiba 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ê.

Page 37: Apostila algoritmos

Algoritmos e Linguagem de Programação

Unisa | Educação a Distância | www.unisa.br39

/* nota.c: le a nota de um aluno e verifica se ele foi aprovado ou repro-vado */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.”);

}

Page 38: Apostila algoritmos

Elisamara de Oliveira

Unisa | Educação a Distância | www.unisa.br40

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!)

Page 39: Apostila algoritmos

Algoritmos e Linguagem de Programação

Unisa | Educação a Distância | www.unisa.br41

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 algorit-mos (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!

Page 40: Apostila algoritmos

Unisa | Educação a Distância | www.unisa.br43

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.

CONSTRUÇÃO DE ALGORITMOS EM PORTUCÊ: PRATICANDO OS COMANDOS E FAZENDO CÁLCULOS

3

3.1 Declaração de Variáveis – Comandos “leia” e “imprima”

Saiba maisSaiba mais

Ao invés de usar %f para apresentar a altura, usamos %.2fO que isso significa? Que nós queremos apresentar a altura com apenas 2 dígitos na parte decimal! Afinal, a forma tra-dicional 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.

Page 41: Apostila algoritmos

Elisamara de Oliveira

Unisa | Educação a Distância | www.unisa.br44

6. Escreva comandos para pedir, ler e imprimir o nome e a idade de uma pessoa.

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 adolescen-te (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.

3.2 Comando Condicional “se”

Page 42: Apostila algoritmos

Algoritmos e Linguagem de Programação

Unisa | Educação a Distância | www.unisa.br45

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.

3.3 Bloco de Programa

Page 43: Apostila algoritmos

Elisamara de Oliveira

Unisa | Educação a Distância | www.unisa.br46

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 “+”.

14. 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.

3.4 Operações Básicas com Números

Page 44: Apostila algoritmos

Algoritmos e Linguagem de Programação

Unisa | Educação a Distância | www.unisa.br47

17. Escreva um comando para calcular a raiz quadrada de um número n1.

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 vis-tos 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 é neces-sá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 maisSaiba 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)

Page 45: Apostila algoritmos

Elisamara de Oliveira

Unisa | Educação a Distância | www.unisa.br48

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 ope-ração equivalente: 10% = 10/100 = 0.10. 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 coinci-de 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!

Page 46: Apostila algoritmos

Algoritmos e Linguagem de Programação

Unisa | Educação a Distância | www.unisa.br49

22. Suponha que, numa certa universidade, os alunos têm um número de 5 dígitos que os identi-ficam. 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 é 00211. 00211 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 10231. 10231 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, 9...

Page 47: Apostila algoritmos

Elisamara de Oliveira

Unisa | Educação a Distância | www.unisa.br50

25. Escreva um comando para verificar se um número é maior que 100.

26. 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 exi-gê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 aprova-do para o time de basquete. O grau de instrução é definido como: “0= sem instrução”, “1=pri-meiro 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 “me-tros”, 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.

Page 48: Apostila algoritmos

Algoritmos e Linguagem de Programação

Unisa | Educação a Distância | www.unisa.br51

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

3.7 Atividades Propostas

Caro(a) aluno(a), este capítulo foi uma excelente oportunidade para exercitarmos a linguagem de programação.

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 3.1.1.

3. Escreva um comando que verifique se a média calculada no exercício 3.1.2 é 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.

Page 49: Apostila algoritmos

Elisamara de Oliveira

Unisa | Educação a Distância | www.unisa.br52

5. Considere o trecho de algoritmo em PortuCê:

se (B1) C1;senão se (B2) se (B3)

C2;

senão { C3; C4; }

C5;

Em PortuCê, não existe uma variável do tipo “lógico” a qual se possa atribuir um valor “verda-deiro” 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.

Page 50: Apostila algoritmos

Algoritmos e Linguagem de Programação

Unisa | Educação a Distância | www.unisa.br53

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 Es-tatística (IBGE) a fazer o censo populacional de uma certa cidade. Sabendo-se que os seguin-tes 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 mPESO: de 48.0 a 60.0 kgIDADE: 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 dizen-do se foi aprovada ou não como modelo.

Page 51: Apostila algoritmos

Unisa | Educação a Distância | www.unisa.br55

Neste capítulo, caro(a) aluno(a), você aprenderá uma metodologia que facilitará o processo de de-senvolvimento 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 com-plexas a partir de soluções simples, que já foram, muitas vezes, encontradas para diversos outros proble-mas 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!

METODOLOGIA PARA A CONSTRUÇÃO DE ALGORITMOS4

Passo 1: Ler e entender o problema

É importante ler e reler, pelo menos 3 vezes, o problema até que ele seja completamente compreen-dido. 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.

4.1 Os Passos da Metodologia

Page 52: Apostila algoritmos

Elisamara de Oliveira

Unisa | Educação a Distância | www.unisa.br56

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

Page 53: Apostila algoritmos

Algoritmos e Linguagem de Programação

Unisa | Educação a Distância | www.unisa.br57

serve apenas de orientação. Cada problema deve, no entanto, ser analisado logicamente para chegar ao seu algoritmo.

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

4.3 Resumo do Capítulo

A estratégia que utilizaremos nesta seção é propor uma lista de exercícios e resolver alguns de-les usando a metodologia, deixando outros para que você, utilizando soluções semelhantes, resolva-os sozinho(a), ok? Então, vamos lá!

Neste capítulo, caro(a) aluno(a), você aprendeu uma metodologia que facilitará o processo de de-senvolvimento 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 pro-blemas 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 com-plexas a partir de soluções simples que já foram, muitas vezes, encontradas para diversos outros proble-mas 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.

AtençãoAtençã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”);}

Page 54: Apostila algoritmos

Elisamara de Oliveira

Unisa | Educação a Distância | www.unisa.br58

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 es-fera será fornecido pelo usuário. Obs.: A = 3.14*R2.

3. 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 neces-sá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/s2. 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.

4.4 Atividades Propostas

Page 55: Apostila algoritmos

Algoritmos e Linguagem de Programação

Unisa | Educação a Distância | www.unisa.br59

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 progra-ma 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 es-tacionamento do automóvel. O usuário entra com os seguintes dados: hora e minuto de entra-da, 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$ 500.00. Se o salário for maior ou igual a 500, mas menor ou igual a R$ 1000.00, o reajuste deve ser de 10%. Caso o salário seja maior que R$ 1000.00, 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$ 1.80. O usuário fornecerá os seguintes dados: tipo de carro (as opções como tipo de carro são a letra “G” – gaso-lina ou a letra “A” – álcool; rejeitar valores inválidos) e capacidade do tanque em litros.

Page 56: Apostila algoritmos

Unisa | Educação a Distância | www.unisa.br61

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 interes-sante 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á!

A LINGUAGEM DE PROGRAMAÇÃO C5

5.1 Tipos Básicos e Declaração de Variáveis em C

Saiba maisSaiba 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.

Page 57: Apostila algoritmos

Elisamara de Oliveira

Unisa | Educação a Distância | www.unisa.br62

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çãoAtençã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).

Page 58: Apostila algoritmos

Algoritmos e Linguagem de Programação

Unisa | Educação a Distância | www.unisa.br63

Funcionamento dos operadores lógicos em C

Operador lógico Ação

&& (e)

Avalia como 1 (verdadeiro) se ambas as expressões forem verdadeiras, caso contrário, avalia como 0 (falso).

| | (ou)

Avalia como 1 (verdadeiro) se pelo menos uma expressão for verdadei-ra, caso contrário, avalia como 0 (falso).

! (não)

Avalia como 1 (verdadeiro) se a expressão for falsa e 0 (falso) se a expres-sã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 maisSaiba 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!)

Page 59: Apostila algoritmos

Elisamara de Oliveira

Unisa | Educação a Distância | www.unisa.br64

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 compa-

raçã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 bran-

co 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)+102.00) - 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>

Page 60: Apostila algoritmos

Algoritmos e Linguagem de Programação

Unisa | Educação a Distância | www.unisa.br65

Exemplos de expressões aritméticas INVÁLIDAS:

resto = 10.0 % 3;

(o operador % só pode envolver números inteiros) salario = totaldehoras *+ 32.50;

(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çãoAtençã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.

Page 61: Apostila algoritmos

Elisamara de Oliveira

Unisa | Educação a Distância | www.unisa.br66

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”);

Page 62: Apostila algoritmos

Algoritmos e Linguagem de Programação

Unisa | Educação a Distância | www.unisa.br67

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)

Page 63: Apostila algoritmos

Elisamara de Oliveira

Unisa | Educação a Distância | www.unisa.br68

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.”);

}

5.4 Comando de Seleção Múltipla em C (switch)

AtençãoAtençã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”.

Page 64: Apostila algoritmos

Algoritmos e Linguagem de Programação

Unisa | Educação a Distância | www.unisa.br69

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

Page 65: Apostila algoritmos

Elisamara de Oliveira

Unisa | Educação a Distância | www.unisa.br70

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 nor-

mais”);

}

(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)

Page 66: Apostila algoritmos

Algoritmos e Linguagem de Programação

Unisa | Educação a Distância | www.unisa.br71

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;}

5.5 Comando de Repetição em C (while)

AtençãoAtençã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” quan-do 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”.

Page 67: Apostila algoritmos

Elisamara de Oliveira

Unisa | Educação a Distância | www.unisa.br72

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 co-mando 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 contro-lar a leitura e a impressão de vetores e matrizes (estruturas que serão estudadas no futuro).

Page 68: Apostila algoritmos

Algoritmos e Linguagem de Programação

Unisa | Educação a Distância | www.unisa.br73

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 in-cremento 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++; }

AtençãoAtençã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”.

Page 69: Apostila algoritmos

Elisamara de Oliveira

Unisa | Educação a Distância | www.unisa.br74

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 rea-lizar duas tarefas. As subexpressões serão avaliadas da esquerda para a direita e toda a expres-sã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 ins-trução for por um comando break.

i=10; for( ; ; ) { if (i==0) break; --i; }

Page 70: Apostila algoritmos

Algoritmos e Linguagem de Programação

Unisa | Educação a Distância | www.unisa.br75

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)

Page 71: Apostila algoritmos

Elisamara de Oliveira

Unisa | Educação a Distância | www.unisa.br76

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çãoAtençã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(); para variáveis do tipo “char” (único)

gets(variável); para variáveis do tipo “char” (string)

Page 72: Apostila algoritmos

Algoritmos e Linguagem de Programação

Unisa | Educação a Distância | www.unisa.br77

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”, &nume-ro);

numero = -5;numero = 2002;

stdio.h

float valor; scanf(“%f”, &valor);valor = -5.867;valor = 2002.50;

stdio.h

char c; c=getche();c = ‘5’;c = ‘s’;c = ‘#’;

conio.h

char nome[20]; gets(nome);Atribuição somente atra-vés de função: strcpy(nome, “Ana”);

conio.hstring.h

Saiba maisSaiba 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.

Page 73: Apostila algoritmos

Elisamara de Oliveira

Unisa | Educação a Distância | www.unisa.br78

AtençãoAtençã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);

Page 74: Apostila algoritmos

Algoritmos e Linguagem de Programação

Unisa | Educação a Distância | www.unisa.br79

5.8 Comentários em C

Saiba maisSaiba mais

•Os comentários podem vir delimitados entre /* */

Ou podem ser comentários de linha //

Os comentários não pertencem às instruções do programa C, mas são úteis para que o programa-dor explique o que está sendo feito.

5.9 Bloco de Programa em C

AtençãoAtençã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.

Exemplos de comentários:

/* Este trecho calcula a media de notas */

desc = preco*0.15; // calcula desconto de 15%

Page 75: Apostila algoritmos

Elisamara de Oliveira

Unisa | Educação a Distância | www.unisa.br80

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);

Page 76: Apostila algoritmos

Algoritmos e Linguagem de Programação

Unisa | Educação a Distância | www.unisa.br81

5.10 Funções Úteis em C

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 descobrimen-

to!”);

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;

}

Caro(a) aluno(a), a linguagem C fornece uma série de funções úteis que pertencem a diferentes biblio-tecas. 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>.

Page 77: Apostila algoritmos

Elisamara de Oliveira

Unisa | Educação a Distância | www.unisa.br82

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.

Page 78: Apostila algoritmos

Algoritmos e Linguagem de Programação

Unisa | Educação a Distância | www.unisa.br83

Funções da biblioteca math.h

Trigonométricas

sin()

Retorna o valor do seno. Recebe como argumento o valor dos graus em “double”.

cos()

Retorna o valor do cosseno. Recebe como argumento o valor dos graus em “double”.

tan()

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()

Retorna o valor do logaritmo na base 10. Exige um argumento do tipo “double”.

Potenciação

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 resulta-do da operação 210, faríamos pow (2, 10).

sqrt()

Retorna o valor da raiz quadrada. Recebe como argumento um “double” do qual ele deve extrair a raiz.

Arredondamento

ceil()

Retorna o primeiro “float” sem casas decimais acima. Recebe um “float” como argumen-to. Exemplo: ceil (45.98561) resultaria em 46.

floor()

Retorna o primeiro “float“ sem casas decimais abaixo. Recebe um “float” como argumen-to. Exemplo: floor (45.98561) resultaria em 45.

Page 79: Apostila algoritmos

Elisamara de Oliveira

Unisa | Educação a Distância | www.unisa.br84

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 maisSaiba mais

Comandos/Tipos PortuCê C

Atribuição = =

Tipos básicos

inteiro int

inteiro longo long int

real float

caractere char

Formatos

inteiro %i ou %d

real %f

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

Operadores lógicos

e &&

ou ||

não !

5.11 Tradução de PortuCê para a Linguagem C

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.

Page 80: Apostila algoritmos

Algoritmos e Linguagem de Programação

Unisa | Educação a Distância | www.unisa.br85

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();

Page 81: Apostila algoritmos

Elisamara de Oliveira

Unisa | Educação a Distância | www.unisa.br86

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;

}

Page 82: Apostila algoritmos

Algoritmos e Linguagem de Programação

Unisa | Educação a Distância | www.unisa.br87

/* 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;

}

Page 83: Apostila algoritmos

Elisamara de Oliveira

Unisa | Educação a Distância | www.unisa.br88

/* nota.c: le a nota de um aluno e verifica se ele foi aprovado ou repro-

vado */

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 repro-

vado */

#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();

}

Page 84: Apostila algoritmos

Algoritmos e Linguagem de Programação

Unisa | Educação a Distância | www.unisa.br89

Neste capítulo, caro(a) aluno(a), você aprendeu uma metodologia que facilitará o processo de de-senvolvimento 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 pro-blemas dividindo-os por partes, diminuindo, assim, a sua complexidade.

5.12 Resumo do Capítulo

5.13 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);

}

Page 85: Apostila algoritmos

Elisamara de Oliveira

Unisa | Educação a Distância | www.unisa.br90

2. Crie uma nova versão do programa em C do exercício 5.1.1 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: quanti-dade 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 estaciona-mento 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.

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$ 500.00. Se o salário for maior ou igual a R$ 500, mas menor ou igual a R$ 1000.00, o reajuste deve ser de 10%. Caso o salário seja maior que R$ 1000.00, 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

Page 86: Apostila algoritmos

Unisa | Educação a Distância | www.unisa.br91

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 é usa-do 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 da-dos, 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 no-vamente 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 proble-mas que envolvam o uso de flags.

USANDO COMANDOS DE REPETIÇÃO EM C6

6.1 Comando de Repetição – Entrada Indeterminada de Dados (uso de flags)

Page 87: Apostila algoritmos

Elisamara de Oliveira

Unisa | Educação a Distância | www.unisa.br92

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).

Page 88: Apostila algoritmos

Algoritmos e Linguagem de Programação

Unisa | Educação a Distância | www.unisa.br93

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!

Page 89: Apostila algoritmos

Elisamara de Oliveira

Unisa | Educação a Distância | www.unisa.br94

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 da-dos 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 en-trada 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 con-trole “cont” até que “cont” fique igual a 5! DENTRO do comando “for” é feita, uma única vez, a leitura do nome e o nome é impresso.

6.2 Comando de Repetição – Entrada de Dados Determinada

Page 90: Apostila algoritmos

Algoritmos e Linguagem de Programação

Unisa | Educação a Distância | www.unisa.br95

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).

Page 91: Apostila algoritmos

Elisamara de Oliveira

Unisa | Educação a Distância | www.unisa.br96

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

Page 92: Apostila algoritmos

Algoritmos e Linguagem de Programação

Unisa | Educação a Distância | www.unisa.br97

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 mi-nutos, é 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 assi-nantes, 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”.

Page 93: Apostila algoritmos

Elisamara de Oliveira

Unisa | Educação a Distância | www.unisa.br98

if (minutos > maiorminutos) { maiorminutos = minutos; quantos = 1; }

No caso de essa comparação ser verdadeira, o maior valor dos minutos deve ser mudado: maiorminu-tos = 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 encon-trado 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”);

Page 94: Apostila algoritmos

Algoritmos e Linguagem de Programação

Unisa | Educação a Distância | www.unisa.br99

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

100 0 0

100 1

50

100 2

150 150 1

150 2

10

150 3

-1O maior número de minutos foi: 150Número de assinantes que atingiram o maior número de minutos: 3

Page 95: Apostila algoritmos

Elisamara de Oliveira

Unisa | Educação a Distância | www.unisa.br100

Suponha o seguinte valor de entrada: -1

minutos maiorminutos quantos Resultados

-1 0 0 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 acres-cidos 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 70000.00

GOL 20000.00

FIM

O preço final do BMW seria assim calculado:

IPI 70000.00 x 0.35 = 24500.00

PRIPI ç 70000.00 + 24500.00=94500.00

FINAL PRIPI x 1.05 = 99225.00

O preço final do GOL seria assim calculado:

IPI 20000.00 x 1.35 =

PRIPI ç 20000.00 + 7000.00=27000.00

FINAL ç PRIPI x 1.05 = 28350.00

Page 96: Apostila algoritmos

Algoritmos e Linguagem de Programação

Unisa | Educação a Distância | www.unisa.br101

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, primeira-mente 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)

Page 97: Apostila algoritmos

Elisamara de Oliveira

Unisa | Educação a Distância | www.unisa.br102

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 1.05. 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);

Page 98: Apostila algoritmos

Algoritmos e Linguagem de Programação

Unisa | Educação a Distância | www.unisa.br103

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 30000.00 SCOOTER 10000.00 MILLE 12000.00 CIVIC 50000.00 FIM

Page 99: Apostila algoritmos

Elisamara de Oliveira

Unisa | Educação a Distância | www.unisa.br104

nome prFabrica IPI prIPI prFinal Resultados

FOX 30000.00 10500.00 40500.00 42525.00IPI= R$ 10500.00 ICMS=2025.00Preco final do automovel FOX= R$42525.00

SCOOTER 10000.00 3500.00 13500.00 14175.00IPI= R$ 3500.00 ICMS=675.00Preco final do automovel SCOOTER= R$14175.00

MILLE 12000.00 4200.00 16200.00 17010.00IPI= R$ 4200.00 ICMS=810.00Preco final do automovel MILLE= R$17010.00

CIVIC 50000.00 17500.00 67500.00 70875.00IPI= R$ 17500.00 ICMS=3375.00Preco final do automovel CIVIC= R$70875.00

FIM 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 eletroni-camente 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, vo-tos 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

Page 100: Apostila algoritmos

Algoritmos e Linguagem de Programação

Unisa | Educação a Distância | www.unisa.br105

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!)

Page 101: Apostila algoritmos

Elisamara de Oliveira

Unisa | Educação a Distância | www.unisa.br106

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;

Page 102: Apostila algoritmos

Algoritmos e Linguagem de Programação

Unisa | Educação a Distância | www.unisa.br107

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;}

Page 103: Apostila algoritmos

Elisamara de Oliveira

Unisa | Educação a Distância | www.unisa.br108

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 nuloseleito-

resvence-

dorResultados

0 0 0 0 0 01 1 12 1 22 2 30 1 42 3 51 2 63 1 7

-1 2

O candidato vencedor foi: 2Numero de votos em branco: 1Numero de votos nulos: 0 Numero de eleitores: 7Fim 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

Page 104: Apostila algoritmos

Algoritmos e Linguagem de Programação

Unisa | Educação a Distância | www.unisa.br109

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)

Page 105: Apostila algoritmos

Elisamara de Oliveira

Unisa | Educação a Distância | www.unisa.br110

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 nume-rador dividido pelo denominador. O próximo numerador ganha 1 (soma 1) e o próximo denomi-nador 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);

Page 106: Apostila algoritmos

Algoritmos e Linguagem de Programação

Unisa | Educação a Distância | www.unisa.br111

Passo 9 (montagem do programa)

/* .......................................... serieS.c: Gera a serie S assim formada: S = 1/N + 2/N-1 + ... + 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 0 1 4

1/4 0 + 1/4 1/4

1 2 3 2/3 0 + 1/4 + 2/3 2/3

2 3 2 3/2 0 + 1/4 + 2/3 + 3/2 3/2

3 4 1 4/1 0 + 1/4 + 2/3 + 3/2 + 4/1 4/1

O valor da serie S= 6.41667

Page 107: Apostila algoritmos

Elisamara de Oliveira

Unisa | Educação a Distância | www.unisa.br112

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 indeter-minada de números...”, aparentemente não poderíamos escrever um algoritmo para resolvê-lo.

6.7 Resumo do Capítulo

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 úl-timo 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. Per-gunte 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;}

Page 108: Apostila algoritmos

Algoritmos e Linguagem de Programação

Unisa | Educação a Distância | www.unisa.br113

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

Page 109: Apostila algoritmos

Elisamara de Oliveira

Unisa | Educação a Distância | www.unisa.br114

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. De-vem 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.

Page 110: Apostila algoritmos

Algoritmos e Linguagem de Programação

Unisa | Educação a Distância | www.unisa.br115

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 mo-delo (flag=NOME=fim) e verifique se elas podem ser aprovadas ou não para serem modelos:

1.70 <= ALTURA <= 1.85

50 <= PESO <= 60

18 <= IDADE <= 21

11. 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, 64...

1, -1, 2, -2, 3, -3, 4, -4...

12. 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 Categoria

A Ficção

B Romance

C Documentário

D Audiolivro

E Técnico

Page 111: Apostila algoritmos

Elisamara de Oliveira

Unisa | Educação a Distância | www.unisa.br116

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 = 1 - 2 + 4 - 8 + 16 - ... + 16.384225 196 169 144 121 1

17. 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 coefi-cientes 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 1000000 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:

= 4 - 4 + 4 - 4 + 4 ...3 5 7 9

21. 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: 12819

Número impresso: 12819 - X

Page 112: Apostila algoritmos

Algoritmos e Linguagem de Programação

Unisa | Educação a Distância | www.unisa.br117

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, sa-bendo 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.

Page 113: Apostila algoritmos

Elisamara de Oliveira

Unisa | Educação a Distância | www.unisa.br118

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úme-ro 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

Page 114: Apostila algoritmos

Unisa | Educação a Distância | www.unisa.br119

/*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 bri-

lhantes

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();

}

OUTROS PROGRAMAS EM C7

Page 115: Apostila algoritmos

Elisamara de Oliveira

Unisa | Educação a Distância | www.unisa.br120

//for.c - ilustra o uso do comando for e de #define

#include <stdio.h>

#include <conio.h>

#define MAXINT 100

#define MAXLONG 1000000

#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;

}

Page 116: Apostila algoritmos

Algoritmos e Linguagem de Programação

Unisa | Educação a Distância | www.unisa.br121

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;

}

Page 117: Apostila algoritmos

Elisamara de Oliveira

Unisa | Educação a Distância | www.unisa.br122

printf (“\n\n\n\n Fim do programa”);

getch();

return 0;

}

/*Compara.c: mostra como se apresenta um menu e se comparam strings e nu-

meros */

#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);

Page 118: Apostila algoritmos

Algoritmos e Linguagem de Programação

Unisa | Educação a Distância | www.unisa.br123

printf (“\n Forneca outro numero inteiro: “);

scanf(“%d”, &num2);

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$ 500.00 “);

printf(“\n2- Computador - R$ 950.00 “);

printf(“\n3- Camera - R$ 600.00 “);

printf(“\n-1 Finaliza “);

Page 119: Apostila algoritmos

Elisamara de Oliveira

Unisa | Educação a Distância | www.unisa.br124

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=500.00 * 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=950.00 * 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;

Page 120: Apostila algoritmos

Algoritmos e Linguagem de Programação

Unisa | Educação a Distância | www.unisa.br125

}

}

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=600.00 * 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);

Page 121: Apostila algoritmos

Elisamara de Oliveira

Unisa | Educação a Distância | www.unisa.br126

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

Page 122: Apostila algoritmos

Unisa | Educação a Distância | www.unisa.br127

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>

PRÁTICA EM LABORATÓRIO8

8.1 Estudo Dirigido

Page 123: Apostila algoritmos

Elisamara de Oliveira

Unisa | Educação a Distância | www.unisa.br128

5. Edite o seguinte programa no editor.

/* nota.c: le a nota de um aluno e verifica se ele foi aprovado ou re-provado */

#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.

Page 124: Apostila algoritmos

Algoritmos e Linguagem de Programação

Unisa | Educação a Distância | www.unisa.br129

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; }

Page 125: Apostila algoritmos

Unisa | Educação a Distância | www.unisa.br131

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 lingua-gem-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, aprenden-do juntos e trabalhando bastante, pois o mercado profissional é amplo e vasto e conta conosco!

Qualquer dúvida, entre em contato por e-mail comigo: [email protected].

CONSIDERAÇÕES FINAIS9

Page 126: Apostila algoritmos

Unisa | Educação a Distância | www.unisa.br133

Caro(a) aluno(a), aqui você encontrará respostas de uma parte dos exercícios das atividades pro-postas. 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 solici-tar 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, 25 ...

�� 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 100”.

1, 1, 2, 3, 5, 8, 13, 21, 34 ...

�� 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 imedia-tamente 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 100”.

RESPOSTAS COMENTADAS DAS ATIVIDADES PROPOSTAS

Page 127: Apostila algoritmos

Elisamara de Oliveira

Unisa | Educação a Distância | www.unisa.br134

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 carac-teres 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 su-perior 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...”);

Page 128: Apostila algoritmos

Algoritmos e Linguagem de Programação

Unisa | Educação a Distância | www.unisa.br135

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!

Page 129: Apostila algoritmos

Elisamara de Oliveira

Unisa | Educação a Distância | www.unisa.br136

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 coman-do 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á executa-do, ou seja, os comandos C3 e C4 serão executados e o ninho de comandos “se” será finali-zado. 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 coman-dos “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 co-mandos “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;

Page 130: Apostila algoritmos

Algoritmos e Linguagem de Programação

Unisa | Educação a Distância | www.unisa.br137

c) o número de mulheres e homens que responderam NÃO

se (resposta == “nao”) ContNao = ContNao + 1;

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 res-postas 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) é (1.5 + 3.2 = 4.7 ... 4.7 > 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á execu-tado e o algoritmo será finalizado!

Resposta: L=0

Page 131: Apostila algoritmos

Elisamara de Oliveira

Unisa | Educação a Distância | www.unisa.br138

8. Você deve escrever os trechos de algoritmo em PortuCê que ajudem o IBGE a fazer o censo popu-lacional 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).

Page 132: Apostila algoritmos

Algoritmos e Linguagem de Programação

Unisa | Educação a Distância | www.unisa.br139

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 ou-tras 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”);

Page 133: Apostila algoritmos

Elisamara de Oliveira

Unisa | Educação a Distância | www.unisa.br140

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,

Page 134: Apostila algoritmos

Algoritmos e Linguagem de Programação

Unisa | Educação a Distância | www.unisa.br141

perimetro);

imprima(“Fim do programa”);

}

Passo 10: testes de mesa

compr larg area perimetro Saída Tela

2.5 5.012.5

10.0 A sala tem 12.5 de area e 10.0 de perimetro

compr larg area perimetro Saída Tela

0 -1.00

-2.0 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;

Page 135: Apostila algoritmos

Elisamara de Oliveira

Unisa | Educação a Distância | www.unisa.br142

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

1000.00 1.751750.00

O valor 1000.00 em dólares corresponde a R$ 1750.00

dolares cotacao reais Saída Tela

1000.00 1.661660.00

O valor 1000.00 em dólares corresponde a R$ 1660.00

7.

Passo 1: ler e entender

Passo 2: variáveis de entrada

- v0

- ângulo θ

Page 136: Apostila algoritmos

Algoritmos e Linguagem de Programação

Unisa | Educação a Distância | www.unisa.br143

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”);

}

Page 137: Apostila algoritmos

Elisamara de Oliveira

Unisa | Educação a Distância | www.unisa.br144

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

300.0 3.14 9.8 0 O alcance do projetil eh 0

v0 teta g S Saída Tela

300.0 0.785 9.8 9183.67 O alcance do projetil eh 9183.67

9.

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);

Page 138: Apostila algoritmos

Algoritmos e Linguagem de Programação

Unisa | Educação a Distância | www.unisa.br145

Passo 7: calcular as saídas

desconto = precoini * 0.05;

precofinal = precoini – desconto;

Passo 8: imprimir os resultados

imprima(“Preço inicial do produto R$ %f “, precoini);

imprima(“Valor do desconto R$ %f “, desconto);

imprima(“Preço final do produto com desconto R$ %f “,

precofinal);

Passo 9: montar o algoritmo

/*Exerc419.c: Le o valor de um produto, concede desconto de 5% e apresenta o preço com desconto e o desconto */

real precoini, desconto, precofinal;

principal ()

{ imprima (“Digite o valor do produto “);

leia(“%f”, &precoini);

desconto = precoini * 0.05;

precofinal = precoini – desconto;

imprima(“Preco inicial do produto R$ %f “, precoini);

imprima(“Valor do desconto R$ %f “, desconto);

imprima(“Preco final do produto com desconto R$ %f “,

precofinal);

imprima(“Fim do programa”);

}

Page 139: Apostila algoritmos

Elisamara de Oliveira

Unisa | Educação a Distância | www.unisa.br146

Passo 10: testes de mesa

precoini desconto precofinal Saída Tela

300.0015.00

285.00Preco inicial do produto R$ 300.00Valor do desconto R$ 15.00Preco final do produto com desconto R$ 285.00

precoini desconto precofinal Saída Tela

1000.0050.00

950.00Preco inicial do produto R$ 1000.00Valor do desconto R$ 50.00Preco final do produto com desconto R$ 950.00

11.Passo 1: ler e entenderPasso 2: variáveis de entrada - A - BPasso 3: variáveis de saída - não temPasso 4: variáveis auxiliares - variável para guardar o valor de APasso 5: declarar todas as variáveis inteiro A, B, auxA;Passo 6: inicializar as variáveis imprima (“Digite o valor do primeiro numero inteiro “); leia(“%i”, &A); imprima (“Digite o valor do segundo numero inteiro “); leia(“%i”, &B);Passos 7 e 8: calcular as saídas e imprimir os resultados imprima (“Valores antes da troca A=%i B=%i “, A, B); auxA = A; // valor de A eh salvo na variavel auxA A = B; // valor de B eh copiado para A B = auxA; // valor de A eh copiado para B imprima (“Valores depois da troca A=%i B=%i “, A, B);Passo 9: montar o algoritmo/*Exerc4111.c: Le dois inteiros A e B e troca seus valores */

inteiro A, B, auxA;

Page 140: Apostila algoritmos

Algoritmos e Linguagem de Programação

Unisa | Educação a Distância | www.unisa.br147

principal ()

{

imprima (“Digite o valor do primeiro numero inteiro “);

leia(“%i”, &A);

imprima (“Digite o valor do segundo numero inteiro “);

leia(“%i”, &B);

imprima (“Valores antes da troca A=%i B=%i “, A, B);

auxA = A; // valor de A eh salvo na variavel auxA

A = B; // valor de B eh copiado para A

B = auxA; // valor de A eh copiado para B

imprima (“Valores depois da troca A=%i B=%i “, A, B);

imprima(“Fim do programa”);

}

Passo 10: testes de mesa

A B auxA Saída Tela3

15

15

3

3Valores antes da troca A=3 B=15

Valores depois da troca A=15 B=3

A B auxA Saída Tela-4

4

4

-4

4Valores antes da troca A=-4 B=4

Valores depois da troca A=4 B=-4

14.

Passo 1: ler e entender

Passo 2: variáveis de entrada

- temperatura (leitura do termômetro)

Passo 3: variáveis de saída

- não tem

Passo 4: variáveis auxiliares

- não tem

Passo 5: declarar todas as variáveis

inteiro temp;

Page 141: Apostila algoritmos

Elisamara de Oliveira

Unisa | Educação a Distância | www.unisa.br148

Passo 6: inicializar as variáveis

imprima (“Digite o valor da temperatura lida no termometro”);

leia(“%i”, &temp);

Passos 7 e 8: calcular as saídas e imprimir os resultados

se (temp < 100)

imprima (“Temperatura muito baixa “);

senão se (temp >=100 e temp <= 200)

imprima (“Temperatura baixa “);

senão se (temp > 200 e temp < 500)

imprima (“Temperatura normal “);

senão imprima (“Temperatura muito alta “);

Passo 9: montar o algoritmo

/*Exerc4114.c: Le a temperatura e imprime mensagem de acordo com o

valor */

inteiro temp;

principal ()

{ imprima (“Digite o valor da temperatura lida no termometro”);

leia(“%i”, &temp);

se (temp < 100)

imprima (“Temperatura muito baixa “);

senão se (temp >=100 e temp <= 200)

imprima (“Temperatura baixa “);

senão se (temp > 200 e temp < 500)

imprima (“Temperatura normal “);

senão imprima (“Temperatura muito alta “);

imprima(“Fim do programa”);

}

Page 142: Apostila algoritmos

Algoritmos e Linguagem de Programação

Unisa | Educação a Distância | www.unisa.br149

Passo 10: testes de mesa

temp Saída Tela-200

Temperatura muito baixa

temp Saída Tela200

Temperatura baixa

temp Saída Tela500

Temperatura muito alta

temp Saída Tela300

Temperatura normal

16.

Passo 1: ler e entender

Passo 2: variáveis de entrada

- tipo do combustível que o carro usa

- capacidade do tanque do carro

Passo 3: variáveis de saída

- valor gasto para encher o tanque do carro

Passo 4: variáveis auxiliares

- não tem

Passo 5: declarar todas as variáveis

char tipo;

inteiro tanque;

real preco;

Passo 6: inicializar as variáveis

imprima (“Digite o tipo de combustivel do carro

G=gasolina ou A=alcool “);

leia(“%c”, tipo);

imprima (“Digite a capacidade do tanque de combustivel: “);

leia(“%i”, &tanque);

Passos 7 e 8: calcular as saídas e imprimir os resultados

se (tipo == ‘G’ ou tipo == ‘g’)

{ preco = tanque * 2.60;

imprima (“Voce gastara R$ %f para encher o tanque de

gasolina “, preco);

}

senão se (tipo == ‘A’ ou tipo == ‘a’)

Page 143: Apostila algoritmos

Elisamara de Oliveira

Unisa | Educação a Distância | www.unisa.br150

{ preco = tanque * 1.80;

imprima (“Voce gastara R$ %f para encher o tanque de

alcool “, preco);

}

senão imprima(“Tipo de combustivel invalido”);

Passo 9: montar o algoritmo

/*Exerc4116.c: Le o tipo de combustivel, a capacidade do tanque e cal-

cula o valor a ser pago para encher o tanque*/

char tipo;

inteiro tanque;

real preco;

principal ()

{ imprima (“Digite o tipo de combustivel do carro

G=gasolina ou A=alcool “);

leia(“%c”, tipo);

imprima (“Digite a capacidade do tanque de combustivel: “);

leia(“%i”, &tanque);

se (tipo == ‘G’ ou tipo == ‘g’)

{ preco = tanque * 2.60;

imprima (“Voce gastara R$ %f para encher o tanque de

gasolina “, preco);

}

senão se (tipo == ‘A’ ou tipo == ‘a’)

{ preco = tanque * 1.80;

imprima (“Voce gastara R$ %f para encher o tanque de

alcool “, preco);

}

senão imprima(“Tipo de combustivel invalido”);

imprima(“Fim do programa”);

}

Page 144: Apostila algoritmos

Algoritmos e Linguagem de Programação

Unisa | Educação a Distância | www.unisa.br151

Passo 10: testes de mesa

tipo tanque preco Saída TelaA 100

180.00 Voce gastara R$180.00 para encher o tanque de alcool

tipo tanque preco Saída Telag 45

117.00 Voce gastara R$117.00 para encher o tanque de gasolina

tipo tanque preco Saída Telay 70

Tipo de combustivel invalido

CAPíTULO 5

1.

/* Eleicoes.c: este programa computa os votos de uma eleição e divulga os

numeros obtidos e o candidato vencedor.*/

#include <stdio.h>

#include <conio.h>

int voto, vencedor, brancos, nulos, eleitores, cont1, cont2, cont3;

int main()

{ printf(“\nDigite o seu voto (1,2,3 ou 0(branco) -1 finaliza): “);

scanf (“%i”,&voto);

brancos=nulos=eleitores=cont1=cont2=cont3=0;

while (voto != -1)

{ ++eleitores;

if (voto == 1)

++cont1;

else if (voto == 2)

++cont2;

else if (voto == 3)

++cont3;

else if (voto == 0)

++brancos;

else ++nulos;

printf(“\n Digite o seu voto (1,2,3 ou 0(branco) –1 finaliza): “);

scanf (“%i”,&voto);

}

if ((cont1 > cont2) && (cont1 > cont3))

Page 145: Apostila algoritmos

Elisamara de Oliveira

Unisa | Educação a Distância | www.unisa.br152

vencedor = 1;

else if ((cont2 > cont1) && (cont2 > cont3))

vencedor = 2;

else vencedor = 3;

printf(“\n O candidato vencedor foi: %i “, vencedor);

printf(“\n Numero de votos em branco: %i “, brancos);

printf(“\n Numero de votos nulos: %i “,nulos);

printf(“\n Numero de eleitores: %i “,eleitores);

printf(“\nFim do programa”);

getch();

return 0;

}

2.

/* Eleicoes2.c: computa os votos de uma eleição e divulga os numeros

obtidos e o candidato vencedor usando o comando switch.*/

#include <stdio.h>

#include <conio.h>

int voto, vencedor, brancos, nulos, eleitores, cont1, cont2, cont3;

int main ()

{

brancos=nulos=eleitores=cont1=cont2=cont3= 0;

while (1)

{ printf (“\nDigite o seu voto (1,2,3 ou 0(branco) -1 finaliza): “);

scanf (“%d”,&voto);

if (voto==-1)

break;

++eleitores;

switch (voto)

{ case 0: ++brancos;

break;

case 1: ++cont1;

break;

case 2: ++cont2;

break;

case 3: ++cont3;

Page 146: Apostila algoritmos

Algoritmos e Linguagem de Programação

Unisa | Educação a Distância | www.unisa.br153

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;

}

3. Este exercício já foi resolvido passo a passo em PortuCê na quatão 3 do capítulo 4!

/*exerc513.c: le valor em dolares e converte para reais*/

#include <stdio.h>

#include <conio.h>

float dolares, reais, cotacao;

int main()

{

printf(“\nPrograma para converter dolares em reais\n”);

printf(“\nQual eh a cotacao do dolar? “);

scanf(“%f”,&cotacao);

printf(“\nQuantos dolares devem ser convertidos para reais? “);

scanf(“%f”,&dolares);

reais = dolares*cotacao;

Page 147: Apostila algoritmos

Elisamara de Oliveira

Unisa | Educação a Distância | www.unisa.br154

printf(“\n%.2f USD convertidos para reais = R$ %.2f

“,dolares,reais);

printf(“\n\nFim do programa”);

getch();

return 0;

}

4. Aqui a estratégia é a seguinte: hora de entrada, de saída, minuto de entrada e de saída são 4 variáveis inteiras diferentes. Se a hora de saída é menor que a hora de entrada, há um erro! Caso contrário, temos que verificar se o minuto de saída é maior que o minuto de entrada. Se for, o usuário paga mais 1 hora pela fração.

/*exerc514.c: calcula o valor a ser pago num estacionamento*/

#include <stdio.h>

#include <conio.h>

int horaent, minent, horasai, minsai, tempo;

float valoraserpago;

int main()

{

printf(“\nPrograma para calcular o valor a ser pago num

estacionamento\n”);

printf(“\nValor do estacionamento: 10.00 por hora ou fracao\n\n”);

printf(“\nQual eh a hora de entrada? “);

scanf(“%i”,&horaent);

printf(“\nQual eh o minuto de entrada? “);

scanf(“%i”,&minent);

printf(“\nQual eh a hora de saida? “);

scanf(“%i”,&horasai);

printf(“\nQual eh o minuto de saida? “);

scanf(“%i”,&minsai);

if (horasai >= horaent)

{

Page 148: Apostila algoritmos

Algoritmos e Linguagem de Programação

Unisa | Educação a Distância | www.unisa.br155

tempo = (horasai - horaent);

if (minsai > minent)

++tempo; // fracao de minutos implica na cobranca de mais 1

hora

valoraserpago = tempo * 10.00;

printf(“\nTotal a ser pago por %i hora(s) de estacionamento R$

%.2f”,

tempo,valoraserpago);

}

else printf(“\nErro nos valores de hora de entrada e saida.”);

printf(“\n\nFim do programa”);

getch();

return 0;

}

5. A estratégia é ler o salário do funcionário e verificar se é válido. Se for, calculamos o aumento do salário de acordo com as faixas informadas. Depois, somamos o aumento no salário original e calculamos o novo salário, dando a boa notícia ao trabalhador!

/*exerc515.c: calcula o novo valor do salario de um funcionario*/

#include <stdio.h>

#include <conio.h>

float salario, aumento, novosalario;

int main()

{

printf(“\nPrograma para calcular o valor do novo salario reajusta-

do de um funcionario\n”);

printf(“\nQual eh o valor de seu salario atual? “);

scanf(“%f”,&salario);

Page 149: Apostila algoritmos

Elisamara de Oliveira

Unisa | Educação a Distância | www.unisa.br156

if (salario > 0)

{

if (salario < 500.00)

aumento = salario * 0.15;

else if (salario >=500.00 && salario <= 1000.00)

aumento = salario * 0.10;

else aumento = salario * 0.05;

novosalario = salario + aumento;

printf(“\nVoce teve um reajuste de %.2f e seu novo salário eh

R$ %.2f”,

aumento,novosalario);

}

else printf(“\nErro no valor do salario. Nao existe salario igual

a zero ou negativo.”);

printf(“\n\nFim do programa”);

getch();

return 0;

}

6. Este problema é um caso típico de uso do comando “switch” para verificar em qual caso certo valor se enquadra!

/*exerc516.c: apresenta a regiao de procedencia de um produto*/

#include <stdio.h>

#include <conio.h>

float preco;

int codigo;

int main()

{

Page 150: Apostila algoritmos

Algoritmos e Linguagem de Programação

Unisa | Educação a Distância | www.unisa.br157

printf(“\nPrograma para apresentar a regiao de origem de um

produto\n”);

printf(“\nQual eh o preco do produto? “);

scanf(“%f”,&preco);

printf(“\nQual eh o codigo da regiao de origem do produto? (1 a

5): “);

scanf(“%i”,&codigo);

switch (codigo)

{ case 1: printf(“\nPreco do produto = R$ %.2f - Regiao de origem

= SUL”,

preco);

break;

case 2: printf(“\nPreco do produto = R$ %.2f - Regiao de origem =

SUDESTE”, preco);

break;

case 3: printf(“\nPreco do produto = R$ %.2f - Regiao de origem =

CENTRO-OESTE”, preco);

break;

case 4: printf(“\nPreco do produto = R$ %.2f - Regiao de origem =

NORTE”,

preco);

break;

case 5: printf(“\nPreco do produto = R$ %.2f - Regiao de origem =

NORDESTE”, preco);

break;

default: printf(“\nCodigo da regiao invalido\n”);

Page 151: Apostila algoritmos

Elisamara de Oliveira

Unisa | Educação a Distância | www.unisa.br158

}

printf(“\n\nFim do programa”);

getch();

return 0;

}

CAPíTULO 6

1. Você deve escrever um programa que leia e imprima o nome e as duas notas de vários alunos. O último aluno terá o nome=FIM. O único fator um pouco chato na solução deste problema simples é a leitura de strings em C, que deve ser feita usando-se funções da biblioteca <string.h>.

/* notas.c: programa que le e imprime 2 notas de vários alunos */

#include <stdio.h>#include <conio.h>#include <string.h>#include <stdlib.h>

char nome[15]; float nota1, nota2;

int main(){ while (1) { printf(“\nQual é o seu nome? FIM finaliza “); gets(nome);

if (strcmp(nome,”FIM”) == 0) break;

printf(“\nDigite a primeira nota do aluno: “); scanf(“%f”,&nota1); printf(“\nDigite a segunda nota do aluno: “); scanf(“%f”,&nota2);

printf(“\n%s, sua 1a nota foi: %1.2f e a sua 2a nota foi: %1.2f“, nome,nota1,nota2); fflush(stdin); //para não dar problema na leitura de strings }

puts(“\nFim do programa”); getch(); return 0;

}

Page 152: Apostila algoritmos

Algoritmos e Linguagem de Programação

Unisa | Educação a Distância | www.unisa.br159

2. Você deve escrever um programa que leia 10 números e calcule e imprima a sua soma. A es-tratégia é usar o comando “for”, pois já sabemos que serão lidos 10 números. É importante aplicarmos a regra básica da programação: TODO SOMADOR E TODO CONTADOR DEVEM SER INICIALIZADOS COM ZERO! Além disso, é importante notar que a impressão da soma dos nú-meros é feita FORA do comando “for”. Isso porque é preciso terminar a leitura dos dados para que a soma final tenha sido calculada e possa ser impressa.

/* soma10.c: Programa que le e soma 10 numeros */

#include <stdio.h>#include <conio.h>

int numero, soma, cont; int main(){ cont=soma=0; for ( ; cont < 10; cont++) { printf(“\nDigite um numero inteiro: “); scanf(“%i”,&numero); soma = soma + numero; } printf(“\nA soma dos 10 numeros eh: %i“,soma);

puts(“\nFim do programa”); getch(); return 0;

}

Page 153: Apostila algoritmos

Elisamara de Oliveira

Unisa | Educação a Distância | www.unisa.br160

3. Você deve escrever um programa que calcule e imprima N números pares, começando do zero. Você deve perguntar ao usuário quantos números ele deseja gerar (ou seja, peça-lhe para for-necer o valor de N). Nesse caso, vamos também usar o comando “for”, pois sabemos que o usuário quer gerar N números pares!

/* Pares.c: programa que gera e imprime N numeros pares */

#include <stdio.h>#include <conio.h>

int n, numeropar, cont;

int main(){ pritnf(“\nQuantos números pares devem ser impressos? “); scanf(“%i”,&n); numeropar = 0; for (cont=0; cont < n; cont++) { printf(“\n%i”,numeropar); numeropar = numeropar + 2; }

puts(“\nFim do programa”); getch(); return 0;}

Note como os números pares são gerados: inicializa-se a variável numeropar com zero e depois vai adicionando-se 2 a ela. Dessa forma, são gerados 0, 2, 4, 6... Fácil, não é?

4.

X Y Resultados

-1 0

1 1 1

-1 2 -2

1 3 3

-1 4 -4

Este exemplo, apesar de simples, mostra claramente como fazer um teste de mesa. Na primeira linha da coluna, mostram-se apenas os valores iniciais das variáveis X e Y. Na segunda linha, a condição do comando “while” foi avaliada como verdadeira (“0 != 4”=Verdadeiro) e os coman-dos delimitados por { e } do “while” foram executados: em X, foi colocado o resultado de “*-1”

Page 154: Apostila algoritmos

Algoritmos e Linguagem de Programação

Unisa | Educação a Distância | www.unisa.br161

(-1*-1=1), Y foi acrescido de 1 (0+1=1) e a condição do comando “if” foi avaliada como verdadei-ra, implicando a impressão do valor de Y (1), o que foi mostrado na coluna “Resultado”. As outras linhas correspondem à execução do laço do comando “while”.

5.

numero cont Resultado

2 0 2 -2

4 1 4 -4

6 2 6 -6

8 3 8 -8

10 4 10 –10

12 5

A cada laço do comando for são impressos 2 números numa mesma linha: positivo e negativo. O número começa de 2 e vai sendo incrementado de 2. cont começa com zero e vai até 5.

6.

/*exerc621.c: le o angulo e informa o quadrante*/

#include <stdio.h>

#include<conio.h>

int angulo;

int quadrante;

int main()

{

printf(“\nPrograma para apresentar a qual quadrante um angulo

pertence\n”);

while (1)

{ printf(“\nDigite o valor do angulo (0 a 360) -1 finaliza: “);

scanf(“%i”,&angulo);

if (angulo== -1)

break;

if (angulo >= 0 && angulo < 90)

Page 155: Apostila algoritmos

Elisamara de Oliveira

Unisa | Educação a Distância | www.unisa.br162

printf(“\nO angulo %i pertence ao quadrante 1\n”, angulo);

else if (angulo >= 90 && angulo < 180)

printf(“\nO angulo %i pertence ao quadrante 2\n”,

angulo);

else if (angulo >= 180 && angulo < 270)

printf(“\nO angulo %i pertence ao quadrante

3\n”, angulo);

else if (angulo >= 270 && angulo <= 360)

printf(“\nO angulo %i pertence ao qua-

drante 4\n”, angulo);

else printf(“\nValor de angulo invalido.\n

“);

}

printf(“\n\nFim do programa”);

getch();

return 0;

}

8.

/*exerc623.c: realiza uma pesquisa de opinião, computando votos em nu-

mero e em percentual */

#include<conio.h>

#include<stdio.h>

#include<stdlib.h>

int opcao, sexo, afavor=0, contra=0, homens=0,mulheres=0, total;

float porcent;

int main()

{ while (1)

{ system(“cls”); // limpa a tela

printf (“\nReferendo sobre a internacionalizacao da

Amazonia. Qual eh sua opiniao?”);

printf (“\n1 - A favor”);

printf (“\n2 - Contra”);

printf (“\n0 - Finaliza”);

printf (“\nDigite a opcao desejada: “);

Page 156: Apostila algoritmos

Algoritmos e Linguagem de Programação

Unisa | Educação a Distância | www.unisa.br163

scanf (“%i”,&opcao);

if (opcao == 0)

break;

while (1)

{ printf(“\nInforme o seu sexo 1=masculino 2=femini-

no: “);

scanf(“%i”, &sexo);

if (sexo == 1)

{ ++homens;

break;

}

else if (sexo == 2)

{ ++mulheres;

break;

}

else

printf(“\nSexo invalido. Por fa-

vor, digite 1 ou 2.\n”);

}

switch (opcao)

{ case 1: printf(“\nObrigada, voto computado!”);

++afavor;

break;

case 2: printf(“\nObrigada, voto computado!”);

++contra;

break;

default: printf(“\nOpcao invalida.”);

}

getch();

} // while 1

total = mulheres + homens;

printf(“\nResultados da pesquisa\n”);

printf(“----------------------”);

printf(“\n\n%i votante(s) do sexo masculino.”, homens);

Page 157: Apostila algoritmos

Elisamara de Oliveira

Unisa | Educação a Distância | www.unisa.br164

if (total > 0)

{ porcent = (float) homens/total;

printf(“\n%.1f %% dos votantes sao homens”,porcent*100);

}

printf(“\n\n%i votante(s) do sexo feminino.”, mulheres);

if (total > 0)

{ porcent = (float) mulheres/total;

printf(“\n%.1f %% dos votantes sao mulheres”,porcent*100);

}

total = afavor + contra;

printf(“\n\n%i votante(s) a favor.”, afavor);

if (total > 0)

{ porcent = (float) afavor/total;

printf(“\n%.1f %% dos votantes sao a favor”,porcent*100);

} printf(“\n\n%i votante(s) contra.”, contra); if (total > 0) { porcent = (float) contra/total; printf(“\n%.1f %% dos votantes sao contra”,porcent*100); } getch(); printf(“\n\n\nFim do programa”); getch(); return 0;}

9.

/*exerc624.c: le n1,n2 e realiza as 4 operacoes*/

#include<stdio.h>

#include<conio.h>

int n1,n2,soma,subtr,mult;

float divisao;

int main()

{

Page 158: Apostila algoritmos

Algoritmos e Linguagem de Programação

Unisa | Educação a Distância | www.unisa.br165

while (1)

{

printf(“\nDigite um numero inteiro ou -1 para finalizar:

“);

scanf(“%i”,&n1);

if (n1 == -1)

break;

printf(“\nDigte outro numero inteiro “);

scanf(“%i”,&n2);

soma=n1+n2;

printf(“\na soma de %i+%i=%i”,n1,n2,soma);

subtr=n1-n2;

printf(“\na subtracao de %i-%i”,n1,n2,subtr);

mult=n1*n2;

printf(“\na multiplicacao de %i+%i=%i”,n1,n2,mult);

if (n2!=0)

{ divisao=n1/n2;

printf(“\na divisao de %i/%i=.3f”,n1,n2,divisao);

}

else

{ printf(“\nnao existe divisao por zero”);

}

}

printf(“\n\nfim do programa”);

getch();

return 0;

}

Page 159: Apostila algoritmos

Elisamara de Oliveira

Unisa | Educação a Distância | www.unisa.br166

11.

/*exerc626.c: gera sequencias numericas*/

#include <stdio.h>

#include<conio.h>

int n, cont, termo;

int main()

{

printf(“\nPrograma para gerar sequencias numericas\n”);

printf(“\nDigite o numero de termos da sequencia de potencias de 2: “);

scanf(“%i”,&n);

termo = 2;

for (cont=0; cont<n; cont++)

{

printf(“ %i “,termo);

termo = termo*2;

}

printf(“\n\n”);

printf(“\nDigite o numero de termos da sequencia de positivos e negativos: “);

scanf(“%i”,&n);

cont = 1;

termo = 1;

while (cont<=n)

{

printf(“ %i “,termo);

termo = termo*-1;

++cont;

if (cont % 2 == 1) // cont eh impar?

++ termo;

Page 160: Apostila algoritmos

Algoritmos e Linguagem de Programação

Unisa | Educação a Distância | www.unisa.br167

}

printf(“\n\n”);

printf(“\n\nFim do programa”);

getch();

return 0;

}

17.

/* exerc6212.c: Este programa le varios numeros inteiros e calcula

sua media */

#include <stdio.h>

#include<conio.h>

int Soma=0, Valor, Cont=0;

float Media;

int main( )

{ printf(“\nPrograma que le varios numeros inteiros e calcula sua

media\n\n”);

while (1)

{ printf(“Forneca um valor inteiro (flag= -1): “);

scanf(“%d”,&Valor);

Soma = Soma + Valor;

++Cont;

}

if (Cont > 0)

{ Media = Soma/Cont;

printf(“\nValor da Media dos: %i números = %.2f

\n”,Cont, Media);

}

else

printf(“\nNenhum valor foi fornecido”);

printf(“\nFim do programa... “);

Page 161: Apostila algoritmos

Elisamara de Oliveira

Unisa | Educação a Distância | www.unisa.br168

getch(); /* para a tela */

return 0;

}

18.

/*exerc6213.c: calcula as raízes de uma equação do 2o grau*/

#include <stdio.h>

#include <conio.h>

#include <math.h>

float a, b, c; // coeficientes da equacao

float delta, raiz1, raiz2;

char resp;

int main()

{ printf(“\nCalcula as raizes de equacoes do 2o grau\n”);

for ( ; ; )

{ printf(“\nDigite o coeficiente a: “);

scanf(“%f”, &a);

printf(“\nDigite o coeficiente b: “);

scanf(“%f”, &b);

printf(“\nDigite o coeficiente c: “);

scanf(“%f”, &c);

if ( a == 0)

printf(“\nNao eh equacao do 2o grau, pois o coeficiente a

eh zero”);

else {

delta = b*b – (4*a*c);

if (delta >= 0)

{ raiz1 = - b + sqrt(delta) / (2*a);

raiz2 = - b - sqrt(delta) / (2*a);

printf(“\nRaiz 1 = %.2f Raiz2=%.2f”, raiz1,

raiz2);

Page 162: Apostila algoritmos

Algoritmos e Linguagem de Programação

Unisa | Educação a Distância | www.unisa.br169

}

else

printf(“\nNao existem raizes reais”);

}

printf(“\nVoce deseja fornecer novos dados? S/N “);

resp = getche();

if (resp==’n’ || resp==’N’)

break;

}

printf (“\n\n\n\n Fim do programa”);

getch();

return 0;

}

19.

/*exerc6214.c: mostra números potencia de 2 menores que 1000000 usando

long int e

gera numeros impares menores que 100 */

#include <stdio.h>

#include <conio.h>

long int numlong;

int num;

int main()

{

printf(“\n Sequencia de numeros potencia de 2 menores que

1000000”);

printf(“\n ===========================================n\n”);

numlong=2;

while (numlong<1000000)

{ printf(“%ld\t”,numlong); // \t corresponde a tabulacao

numlong = numlong * 2;

}

Page 163: Apostila algoritmos

Elisamara de Oliveira

Unisa | Educação a Distância | www.unisa.br170

printf(“\n Sequencia de numeros impares menores que 100”);

printf(“\n ===================================\n\n”);

num=1;

while (num<100)

{ printf(“%i\t”,num);

num = num + 2;

if (num%10==1)

getch();

}

printf (“\n\n\n\n Fim do programa”);

getch();

return 0;

}

20.

/*exerc6215.c: aproxima o numero Pi atraves de uma serie */

#include <stdio.h>

#include <conio.h>

double pi, termo;

float num, den;

long int n, cont=0;

int main()

{

printf(“\n Aproxima o valor de Pi por uma serie numerica”);

printf(“\n =================================n\n”);

pi=0;

printf(“\nDigite o numero de termos da serie: “);

scanf(“%ld”,&n);

Page 164: Apostila algoritmos

Algoritmos e Linguagem de Programação

Unisa | Educação a Distância | www.unisa.br171

num = 4;

den = 1;

for (cont=0; cont < n; cont++)

{ termo = num/den;

if (cont % 2 == 0) // se o contador de termos for par, adi-

ciona o termo

pi = pi + termo;

else

pi = pi – termo;

den = den + 2;

}

printf(“\nO valor de Pi aproximado pela serie com %ld termos =

%lf”, n, pi));

printf (“\n\n\n\n Fim do programa”);

getch();

return 0;

}

21.

/*exerc6216.c: le numeros e calcula o digito verificador*/

#include <stdio.h>

#include<conio.h>

long int n;

int d1,d2,d3,d4,d5,dv;

int main()

{

printf(“\nPrograma para ler numeros e calcular o digito

verificador\n”);

while (1)

{ printf(“\nDigite um numero inteiro de 5 digitos (-1 finaliza):

Page 165: Apostila algoritmos

Elisamara de Oliveira

Unisa | Educação a Distância | www.unisa.br172

“);

scanf(“%ld”,&n);

if (n == -1)

break;

if (n >= 10000 && n<=99999) // verifica se o numero tem 5 dí-

gitos

{

d1 = n / 10000;

d2 = (n % 10000) / 1000;

d3 = (n % 1000) / 100;

d4 = (n % 100) / 10;

d5 = n % 10;

printf(“\nd1= %i d2=%i d3=%i d4=%i

d5=%i”,d1,d2,d3,d4,d5);

dv = (d1 + d2 + d3 + d4 + d5) % 11;

if (dv == 10)

printf(“\n\n%ld - x “, n);

else

printf(“\n\n%ld - %i”,n, dv);

printf(“\n\n”);

}

else printf(“\nEste numero nao tem 5 digitos.\n”);

}

printf(“\n\nFim do programa”);

getch();

return 0;

}

Page 166: Apostila algoritmos

Algoritmos e Linguagem de Programação

Unisa | Educação a Distância | www.unisa.br173

32.

/*exerc6227.c: le o codigo do produto e apresenta sua classificacao*/

#include <stdio.h>

#include<conio.h>

int codigo;

int main()

{ printf(“\nPrograma para apresentar a classificacao de

produtos\n”);

while (1)

{ printf(“\nQual eh o codigo do produto? (1 a 9 ou 0 para fina-

lizar): “);

scanf(“%i”,&codigo);

if (codigo == 0)

break;

switch (codigo)

{ case 1: printf(“\nClassificacao do produto %i = ALIMENTO

NAO PERECIVEL”, codigo);

break;

case 2:

case 3:

case 4: printf(“\nClassificacao do produto %i = ALIMENTO

PERECIVEL”, codigo);

break;

case 5:

case 6: printf(“\nClassificacao do produto %i = VESTUA-

RIO”, codigo);

break;

case 7: printf(“\nClassificacao do produto %i = HIGIENE

PESSOAL”, codigo);

break;

Page 167: Apostila algoritmos

Elisamara de Oliveira

Unisa | Educação a Distância | www.unisa.br174

case 8:

case 9: printf(“\nClassificacao do produto %i = LIMPEZA

E UTENS. DOMESTICOS”,

codigo);

break;

default: printf(“\nCodigo do produto invalido\n”);

}

printf(“\n”);

} // while 1

printf(“\n\nFim do programa”);

getch();

return 0;

}

Page 168: Apostila algoritmos

Unisa | Educação a Distância | www.unisa.br175

REFERÊNCIAS

AITKEN, P.; JONES, B. C – Guia do Programador. Rio de Janeiro: Berkeley Brasil, 1994.

ASCENCIO, A. F. G.; VENERUCHI, E. A. Fundamentos da programação de computadores. São Paulo: Prentice Hall, 2007.

CALVERT, C. Programando aplicações em Windows com C e C++. Rio de Janeiro: Berkeley, 2004.

FORBELLONE, A. L.; BERSPACHER, H. Lógica de programação. 3. ed. São Paulo: Prentice Hall, 2005.

GOTTFRIED, B. S. Programando em C. São Paulo: Makron Books, 2003.

KERNIGHAN, B. W.; RITCHIE, D. M. C – A linguagem de programação padrão ANSI. Rio de Janeiro: Campus, 1989.

LOPES, A.; GARCIA, G. Introdução a programação: 500 algoritmos resolvidos. Rio de Janeiro: Campus, 2002.

MANZANO, J. A. M. G.; OLIVEIRA, J. F. Algoritmos: lógica para desenvolvimento de programas de computador. 22. ed. São Paulo: Érica, 2009.

MIZRAHI, V. V. Treinamento em linguagem C. Módulo 1. 2. ed. São Paulo: Makron Books, 2006.

______. Treinamento em linguagem C. Módulo 2. 2. ed. São Paulo: Makron Books, 2006.

SCHILDT, H. C completo e total. São Paulo: Makron Books, 1997.

SEBESTA, R. W. Conceitos de linguagens de programação. 4. ed. Porto Alegre: Bookman, 2000.

TENEMBAUM, A. M. Estruturas de dados usando C. São Paulo: Pearson, 1995.