• Nenhum resultado encontrado

LINGUAGEM C Introdução

N/A
N/A
Protected

Academic year: 2022

Share "LINGUAGEM C Introdução"

Copied!
23
0
0

Texto

(1)

P r o f . G h u n t e r P a u l o – I n t r o d u ç ã o à L i n g u a g e m C 1

Algoritmos e Linguagem de Programação Curso: Engenharia Elétrica

_____________________________________________________

LINGUAGEM C

Introdução

Histórico e Apresentação da Linguagem:

Linguagem C

A linguagem C foi desenvolvida na década de 70, por Dennis Ritchie e Ken Thompson, baseando-se na linguagem B, e implementado para sistemas operacionais UNIX. Tanto C quanto B derivam da primitiva linguagem BCPL, onde B é a primeira letra de BCPL, e C, a segunda. C influenciou várias linguagens como D e Euphoria. C é uma linguagem de programação estruturada, de médio nível, e tem como ponto forte sua eficiência, leveza, poder e velocidade com

códigos bem legíveis e de fácil interpretação. Uma de suas maiores vantagens é sua aproximação com a linguagem de leitura de máquina, ao mesmo tempo que mantêm grandiosa abstração de dados complexos ao programador.

Linguagem C++

De forma bastante “grosseira”, podemos ver o C++ como uma “atualização”

ou “extensão” da linguagem C, mas é bem mais que isso. Basicamente, é definida por Bjarne Stroustrup como “C with classes”, ou C com classes. Esses conceitos de classe não faz parte do escopo da disciplina de microcontroladores.

Foi desenvolvida em 1983, trazendo consigo principalmente vantagens ligadas à orientação a objetos, reutilização e aproveitamento de código, e muita facilidade na hora de organizar e montar seu código fonte. Essa linguagem influenciou várias outras, como C#, Java, D, PHP etc.

Abaixo temos alguns exemplos de aplicações e programas comerciais desenvolvidos totalmente ou parcialmente em C++.

 Grande parte dos programas da Microsoft, incluindo Windows XP, Windows NT,Windows 9x, Pacote Office, Internet Explorer, Visual Studio e outros.

(2)

P r o f . G h u n t e r P a u l o – I n t r o d u ç ã o à L i n g u a g e m C 2

 Sistemas Operacionais como o já citado Windows, Apple OS X, BeOS, Solaris e Symbian (sistema operacional para celulares).

 Bancos de dados como SQL e MySQL.

 Aplicações Web, como a máquina de busca Google e o sistema de comércio virtual da Amazon.

 Aplicações gráficas como os programas da Adobe (Photoshop, Illustrator), Maya eAutoCAD.

 Jogos em geral, como o Doom III.

Compiladores:

Um compilador é um tipo de aplicativo que cria uma “camada de abstração” entre o programador e o computador. Em outras palavras, o compilador traduz tudo que é escrito por um usuário de um jeito que a máquina entenda, e de forma que interprete essa informação. Em todo o universo computacional, existem várias linguagens de programação categorizadas da seguinte forma:

 Alto Nível (C++, Java)

 Médio Nível (C, Pascal)

 Baixo Nível (Assembly)

Quanto mais baixo o nível, mais próximo estamos da linguagem de montagem da máquina. Um exemplo de linguagens de baixo nível que conhecemos é a linguagem de bits (0 ou 1) e Assembly (que trabalha diretamente com operações de registros e endereços de memória).

Quando falamos de médio e alto nível, falamos de linguagens que cada vez mais “encobrem” detalhes na hora de implementar, e quanto maior o nível, menos detalhes específicos ligados a hardware teremos que nos preocupar. Por exemplo:

se estivermos mexendo com C++, não precisaremos nos preocupar com qual endereço de memória ou parte física do disco teremos que guardar a informação.

O compilador e a linguagem de programação se encarregará disso automaticamente. O compilador cria a “ponte de comunicação” entre uma linguagem humanamente simples e prática ao ser humano trabalhar, sem perder todo o excesso de informação e detalhes que a máquina precisa.

Um compilador trabalha passo-a-passo da seguinte forma:

(3)

P r o f . G h u n t e r P a u l o – I n t r o d u ç ã o à L i n g u a g e m C 3

 O compilador lê linha após linha (levando em conta o fluxo de código), verificando se toda a sintaxe foi descrita corretamente(se estiver errada, retornará uma mensagem de erro detalhada ao usuário);

 Traduz o código-fonte de C++ (por exemplo) pra linguagem de máquina;

 Se tudo for interpretado corretamente, ele irá criar um arquivo com extensão .OBJ, com todas as linhas traduzidas, e um arquivo .EXE, que é executado pelo sistema operacional;

Usando o compilador

Criando um programa no DevC++ :

Primeiro passo:

1) Instale e execute o DevC++

2) Quando o programa abrir, na guia principal do programa ao alto, clique em Arquivo

3) Depois clique em Novo e Arquivo Fonte

A seguinte tela em branco deverá aparecer

(4)

P r o f . G h u n t e r P a u l o – I n t r o d u ç ã o à L i n g u a g e m C 4

Segundo passo:

1) Escolha a opção Arquivo e Salvar Como.

2) Dê um nome qualquer para o arquivo 3) Pressione Salvar

(5)

P r o f . G h u n t e r P a u l o – I n t r o d u ç ã o à L i n g u a g e m C 5 Agora basta colar o seguinte código na página de código-fonte em branco:

#include <iostream>

using namespace std;

int main() {

cout << "Primeiro Programa em C ! "<<endl;

return(0);

}

Pressione a tecla F11

para compilar e executar o programa

Deve-se abrir uma janela mostrando a mensagem "Primeiro Programa em C ! " e algo como "Aperte qualquer tecla para continuar...". Conforme a figura abaixo:

(6)

P r o f . G h u n t e r P a u l o – I n t r o d u ç ã o à L i n g u a g e m C 6

Erros de compilação:

Basicamente, quando terminamos de criar nosso código-fonte, o compilador realiza dois processos até termos o aplicativo final, que são: a compilação e a execução. Quando compilamos um código-fonte, realizamos um processo de verificação e interpretação de código, até ser possível que a máquina “entenda” e possa executar esses comandos. Isso é a compilação, e é nesse processo que se verifica se o código foi descrito corretamente. Para isso, quando é feita a compilação, na barra inferior desse aplicativo, são demonstrados status de verificação e integridade de erros, e o compilador retorna uma mensagem de aviso, se o código apresentar erros (digitação incorreta do programador) ou não.

Se ele tiver erros, todo o processo de compilação é interrompido, e o compilador especifica qual é a causa da falha. Não se pode chegar no código-fonte final se houver erros de compilação.

Outra informação importante, além dos avisos de erros, são os “warnings”.

A diferença entre os dois vêm do fato de um “warning” não impossibilitar a execução de um código-fonte, mas sim que futuramente ele pode causar erros quando o programa já estiver sendo executado (por exemplo, um acesso a endereço de memória não especificado).

(7)

P r o f . G h u n t e r P a u l o – I n t r o d u ç ã o à L i n g u a g e m C 7

Primeiro programa

“Primeiro Programa em C” é a clássica aplicação que todo programador iniciante cria quando começa a estudar uma linguagem, sendo um tipo de programa bem simples. Trata-se apenas de uma mensagem de texto “Primeiro Programa em C”

mostrada em tela. Fizemos isso na hora que criamos o arquivo, agora vamos analisar o código linha após linha:

#include <iostream>

using namespace std;

void main() {

cout << "Primeiro Programa em C ! \n";

return(0);

}

#include <iostream>

É uma diretiva (explicaremos depois o que isso significa). A função #include une o código-fonte de uma biblioteca da linguagem (que no exemplo é o arquivo de cabeçalho iostream.h) com o código atual que está sendo feito. Não apenas para esse caso, mas a função #include pode anexar o seu arquivo-fonte com qualquer outro tipo de arquivo C++, como cabeçalhos (.h ou .hpp) ou fonte (.c ou .cpp) como veremos mais adiante. Esse cabeçalho (iostream.h) guarda as informações referentes à entrada e saída de dados em códigos compilados (dentre várias funções, esse cabeçalho permite exibição de mensagens de tela e captação de informações passadas via teclado). Com essa diretiva, é possível imprimir a mensagem “Primeiro Programa em C!”.

using namespace std;

Essa é outra diretiva (using). Namespace refere-se a todos os componentes padrões (funções, variáveis, classes etc) da classe padrão de libraries básicas do C++, o std. Sem ele, teríamos que chamar a função cout (que explicaremos mais adiante) da seguinte forma:

(8)

P r o f . G h u n t e r P a u l o – I n t r o d u ç ã o à L i n g u a g e m C 8 std::cout << "Texto";

Ao invés de:

cout << "Texto";

Ao longo de um programa significativamente grande, esse procedimento faz bastante diferença. Outra informação importante tem a ver com o ponto e vírgula no final de cada linha de código. Trata-se de uma forma de você definir para o compilador que você já terminou de escrever a parte do código relativa a aquela linha (apesar de que nem sempre você coloca ponto e vírgula, iremos verificar isso com o tempo).

int main() {

//insira todo o código do aplicativo aqui return(0);

}

Aqui estamos definindo a função principal (main) do programa. Ela sempre é a primeira a ser executada obrigatoriamente pelo compilador, e todo o conteúdo do programa é executado nesse bloco de informação, entre as chaves { e }.

O int é o tipo de retorno da função (função deve retorna algum valor).

Iremos explicar melhor sobre tipos de dados posteriormente.

Todos os comandos do seu aplicativo devem estar onde eu coloquei //insira todo o código do aplicativo aqui .

Por exemplo, o comando cout que usamos.

cout << "Primeiro Programa em C!"<<endl;

Esse comando permite a exibição de um texto na tela que esteja entre aspas (no caso, ele mostra " Primeiro Programa em C!). Usamos endl no final como uma instrução que imediatamente “salta uma linha”.

cout é o nome da função, que executa a tarefa de exibir uma mensagem na tela. Usamos << sempre pra determinar que um comando (no caso o cout) está migrando pra um periférico de saída (no caso o monitor). E por fim o ; que determina sempre o final de uma linha de código.

(9)

P r o f . G h u n t e r P a u l o – I n t r o d u ç ã o à L i n g u a g e m C 9 Outro exemplo de cout:

#include <iostream>

using namespace std;

int main() {

cout << “Curso de Linguagem de Programação!\n”;

cout << “Turma de Engenharia Eletrica ! \n”;

cout << “Instituto Federal de Goiás.”;

return(0);

}

Variáveis

Conceito:

Quando um programa é escrito em qualquer linguagem de programação é necessário a definição de algumas variáveis. Variáveis são instâncias onde serão armazenados em memória, valores utilizados durante a execução de programas.

Estas variáveis podem ser modificadas para suportar diferentes tipos de dados. Os principais tipos de dados utilizados em C++ podem ser divididos em variáveis inteiras e reais.

Variáveis inteiras servem para armazenar números inteiros, sem partes fracionárias. O principal tipo de variável inteira em C++ é o int. Além dele, existem os tipos char, short e long, cada um deles caracterizado por um tamanho em bits diferente. Estes tipos podem ser modificados pelo prefixo “unsigned”, que determina que a variável em questão só terá valores positivos, liberando o bit de sinal e aumentando a capacidade de armazenamento da variável (por default, todas as variáveis inteiras e reais declaradas em C++ são “signed”, ou seja, possuem um bit de sinal e podem ser tanto positivas como negativas). A tabela abaixo mostra os principais tipos de inteiros, seus tamanhos em bits e seu intervalo de armazenamento.

(10)

P r o f . G h u n t e r P a u l o – I n t r o d u ç ã o à L i n g u a g e m C 10 Variáveis reais servem para armazenar números que possuem partes fracionárias. Existem duas maneiras de representar números fracionários em C++.

A primeira, a mais simples, é utilizar o ponto para separar as partes inteiras e fracionárias. Por exemplo:

0.00098 1.2145 3.1461 8.0

(Mesmo no caso de um número com parte fracionária igual a zero, a utilização do ponto assegura que este número seja considerado um número de ponto flutuante por C++).

A segunda maneira é utilizar a notação científica E. Por exemplo : 3.45E7 significa “3.45 multiplicado por 10 elevado à sétima potência (10.000.000)”. Essa notação é bastante útil para representar números realmente grandes ou realmente pequenos. A notação E assegura que o número seja armazenado em formato de ponto flutuante. Alguns exemplos:

2.52E8 = 2.52 x 100.000.000 = 252.000.000 -3.2E3 = -3.2 x 1000 = -3200

23E-4 = 23 x 0.0001 = 0.0023

Assim como os inteiros, os números reais em C++ podem ser representados por 3 tipos de variáveis com diferentes intervalos. São elas: float, double e long double. Float é o tipo de variável real natural, aquela com a qual o sistema trabalha com maior naturalidade. Double e long double são úteis quando queremos trabalhar com intervalos de números reais realmente grandes.

Utilizamos números reais geralmente para expressar precisão através do número de casas decimais, então podemos dizer que uma variável float é menos precisa

(11)

P r o f . G h u n t e r P a u l o – I n t r o d u ç ã o à L i n g u a g e m C 11 que uma variável double, assim como uma variável double é menos precisa que long double. A tabela abaixo mostra os tipos de variáveis reais, seu tamanho em bits e o intervalo de armazenagem.

 Como usar variáveis:

Declarando (criando) variáveis

Para declarar uma variável somente é obrigatório declarar seu tipo e nome:

<tipo> <nome>;

Por exemplo:

int exemplo;

Além disso, caso seja necessário, podemos declarar um valor a esta variável no momento de sua declaração, e também adicionar um prefixo a ela, da seguinte forma:

<prefixo> <tipo> <nome> = <valor>;

Por exemplo:

unsigned int exemplo = 12;

Teste o seguinte código:

#include <iostream>

using namespace std;

int main() {

int valor = 20;

cout << "Primeiro o valor eh " << valor << endl;

valor = 10;

cout << "Aqui o valor eh " << valor << endl;

valor = 15;

cout << "Agora o valor eh " << valor << endl;

return(0);

}

(12)

P r o f . G h u n t e r P a u l o – I n t r o d u ç ã o à L i n g u a g e m C 12 Repare que declaramos a variável atribuindo seu valor diretamente (int valor=20). A forma como utilizamos o cout explicaremos em próximas etapas.

Operadores Matemáticos

Conceito:

Tendo em vista o estudo de variáveis numéricas, torna-se necessário estudar operadores que sejam aplicados a esses objetos. Falamos de cálculos matemáticos como adição, subtração, divisão etc.

Tipos:

Temos os seguintes tipos e suas formas de representação:

Soma: +

Subtração: -

Divisão: /

Multiplicação: *

Resto de Divisão Inteira: %

Exemplos:

Veremos um código-fonte que demonstra cada operação:

#include <iostream>

using namespace std;

int main() {

int soma = 15 + 15;

int subtracao = 200-50;

int multiplicacao = 15*5;

float divisao = 15.0 /4.0;

float resto_inteiro = 5 % 2;

cout << "15 + 15 = " << soma << endl;

cout << "200 - 50 = " << subtracao << endl;

cout << "15 * 5 = " << multiplicacao << endl;

//aqui temos a divisão real

cout << "15 / 4 = " << divisao << endl;

//aqui temos o resto da divisão 5 / 2. Sabemos que essa divisão dá: 2 * 2 + 1 = 5 //logo, o resto dela é 1

cout << "5 % 2 = " << resto_inteiro << endl;

return(0);

}

(13)

P r o f . G h u n t e r P a u l o – I n t r o d u ç ã o à L i n g u a g e m C 13 Outro conceito importante tem a ver com parênteses. Se formos operar de forma que:

X1 = (10 + 14) / 2 e X2 = 10 + 14 / 2

Teremos X1 = 12 e X2 = 17. Os valores foram diferentes porque, operações ligadas a parênteses são sempre efetuadas primeiro. Assim, em X1, ele soma 10 + 14 = 24 primeiro e depois divide por 2. Dá X1 = 12.

No segundo caso, temos que primeiro o compilador divide 14 / 2 = 7 e depois soma com 10. Dá X2 = 17. O compilador sempre opera primeiro onde tiver parênteses. Se não colocarmos parênteses, o compilador primeiro efetua operações de divisão e multiplicação, e depois soma e subtração.

Teste o código e verifique:

#include <iostream>

using namespace std;

int main() {

float x1 = (10.0+14.0)/2.0; //x1 = 12 float x2 = 10.0+14.0/2.0; // x2 = 17 cout << "x1 = " << x1 << endl;

cout << "x2 = " << x2 << endl;

return(0);

}

Comentários

Conceito:

São usados quando queremos inserir textos ao longo de um código fonte sem que pra isso eles sejam necessariamente executados. São muito úteis para escrevermos explicações sobre o que uma linha ou função do programa faz, ou pra marcarmos algum trecho do código que não queremos que seja executado no momento dentre outras funcionalidades. É muito útil para testes e busca por erros.

Para isso, basta usar // antes de uma linha de código. Feito isso, ele ficará com uma cor diferente no compilador, e tudo que estiver na linha não será executado. Para criar um comentário que contenha mais de uma linha, basta usar /* (conteúdo do comentário) */. Tudo que estiver entre esses pares de caracteres (barra vertical e asterisco) não é executado. Veja o exemplo:

(14)

P r o f . G h u n t e r P a u l o – I n t r o d u ç ã o à L i n g u a g e m C 14

#include <iostream>

using namespace std;

int main() {

int x;

x = 10;

//x = 100;

cout << "X vale = " << x << endl;

/*

x = 12;

x = 28;

x = 42*/

cout << "X ainda vale = " << x << endl;

return(0);

}

Diretivas

#include

Essa diretiva tem como objetivo “concatenar” (ou anexar) um código fonte de outro arquivo com o que você está utilizando no momento. Isso vale pra tudo que foi criado no código anterior, desde variáveis, classes, funções etc.

Nós a declaramos da seguinte forma:

#include <iostream>

Usamos < > quando estamos chamando arquivos de bibliotecas padrões do compilador, e “ “ quando chamamos arquivos comuns que queremos anexar ao projeto atual (que não necessariamente pertençam a biblioteca, como um arquivo de cabeçalho que criamos). Ao utilizar include, ele sempre verifica se a biblioteca (ou cabeçalho) está na pasta raiz do projeto ou na pasta include do compilador.

Normalmente #include é usado em arquivos de cabeçalho (os quais veremos mais tarde, são os arquivos .h ou .hpp), mas também pode ser empregado em arquivos de código-fonte (.c ou .cpp).

#define

Essa diretiva tem como facilidade a função de simplificar a digitação.

Ao invés de digitar várias vezes comandos complexos e extensos que são utilizados diversas vezes ao longo de um código, como:

(15)

P r o f . G h u n t e r P a u l o – I n t r o d u ç ã o à L i n g u a g e m C 15 cout << “bla bla bla bla bla bla bla bla bla bla bla bla bla”;

Podemos criar uma #define que apenas substitui a repetição desse termo por uma única palavra. Temos a declaração de #define da seguinte maneira:

#define BLA cout << “bla bla bla bla bla bla bla”;

De acordo com o exemplo, sempre que escrevermos BLA ao longo do código, será a mesma coisa do que escrever todo o comando cout << “bla bla bla...”; Veja o exemplo:

#include <iostream>

#define BLA cout << "bla bla bla bla bla bla bla"<< endl;;

#define PI 3.1415 using namespace std;

int main() {

BLA BLA

cout << endl;

cout << "Temos que o valor de PI eh= " << PI << endl;

return(0);

}

Leitura e Retorno de Dados

Escrita:

Cout

Como já visto, é uma função que imprime textos em tela, no seguinte formato:

cout << “Texto a ser impresso “ << Valor de Variável << “Texto”;

Sempre colocamos << pra indicar que há fluxo de saída a um periférico (no exemplo de cout nós temos somente fluxo ao monitor). Colocamos entre “ “ todo texto que deve ser impresso em tela.

(16)

P r o f . G h u n t e r P a u l o – I n t r o d u ç ã o à L i n g u a g e m C 16

Leitura:

Cin

Vamos supor que agora vamos fazer um programa que efetue somas matemáticas. Como é possível fazer com que o usuário escolha os fatores os quais efetuamos a soma? Pra isso, usamos um comando que capture todas as mensagens que forem digitadas pelo usuário. É o comando cin. cin >> variável

Repare que o símbolo >> agora está invertido com relação ao cout. Isso ocorre porque não há mais fluxo de saída de dados, agora nós estamos inserindo dados ao aplicativo. Com esse comando, emitimos tudo que é digitado no teclado para dentro de uma variável. Veja o exemplo de um programa que captura idade de um usuário:

#include <iostream>

using namespace std;

int main() {

int idade;

cout << "Diga sua idade e aperte ENTER para continuar= ";

cin >> idade;

cout << endl;

cout << "Processando...\n\n" endl;;

cout << "Voce tem " << idade << " anos.\n" <<endl;;

return(0);

}

Primeiro nós pedimos ao usuário que digite uma idade (que é um valor numérico. Se digitarmos uma palavra ou algo que não seja números, isso causará erro, pois a variável receberá um valor não esperado). O usuário depois de digitar o número, apertará ENTER. Isso fará com o que foi digitado seja guardado na variavel idade.

Veja outro exemplo com um programa de fazer somas:

(17)

P r o f . G h u n t e r P a u l o – I n t r o d u ç ã o à L i n g u a g e m C 17

#include <iostream>

using namespace std;

int main() {

int fator1;

int fator2;

cout << "Digite o primeiro termo para a soma: ";

cin >> fator1;

cout << "\n\n"; //salta duas linhas

cout << "Digite o segundo termo para a soma: ";

cin >> fator2;

cout << "Processando...\n\n";

cout << " Resultado da soma: " << fator1+fator2 << endl;

return(0);

}

Há um comando semelhante de leitura e impressão de dados na linguagem C, que são o printf e o scanf. São semelhantes, só diferenciando pela necessidade de especificar o formato da variável de retorno ou inserção de dados antes de mostrar ou capturar textos em tela. Não vamos nos ater a elas, já que cin e cout são bem mais simples e realizam a mesma tarefa.

Estruturas de Controle de Fluxo

Estruturas de controle de fluxo são comandos utilizados em uma linguagem de programação para determinar qual a ordem e quais comandos devem ser executados pelo programa em uma dada condição. C++ oferece várias opções de estrutura de controle de fluxo, todas elas herdadas da linguagem C. Neste módulo iremos ver como funcionam cada uma destas estruturas em detalhe.

Geralmente, as estruturas de controle utilizam expressões condicionais.

Caso a expressão retorne 0, dizemos que ela é falsa. Caso ela retorne qualquer outro valor, dizemos que ela é verdadeira. Nesse contexto, qualquer expressão pode ser utilizada desde que retorne um valor zero ou não zero. Podemos utilizar operadores aritméticos, relacionais, lógicos, desde que no final a expressão nos retorne um valor que possa ser testado. Também é possível testar várias condições ao mesmo tempo, unindo as expressões com o auxílio dos operadores AND e OR.

(18)

P r o f . G h u n t e r P a u l o – I n t r o d u ç ã o à L i n g u a g e m C 18

A declaração if

Utilizamos a declaração if quando desejamos que o programa teste uma ou mais condições e execute um ou outro comando de acordo com o resultado deste teste. A sintaxe de if é a seguinte:

if (condição) {

//comandos;

} else {

//comandos;

}

A declaração if testará a condição expressa entre parênteses. Caso a condição seja verdadeira, os comandos declarados entre as chaves serão executados. A declaração else é opcional: podemos utilizá-la para determinar um conjunto de comandos que serão executados caso a condição testada seja falsa.

Note que somente um dos conjuntos de comandos será executado, nunca os dois:

caso a condição seja verdadeira, o bloco pertencente a if será executado; caso a condição falhe, o bloco pertencente a else será executado.

O programa abaixo ilustra de maneira simples o uso da declaração if-else, obtendo um número do usuário e verificando se este valor é maior ou igual a 50.

#include <iostream>

using namespace std;

int main() {

int teste;

cout<<"Digite um numero qualquer:"<<endl;

cin>> teste;

if (teste > 50) {

cout<<"O numero que voce digitou é maior que 50";

} else {

cout<<"O numero que voce digitou é menor que 50";

} return(0);

}

É possível também aninhar if’s, ou seja, fazer uma declaração if dentro de outra declaração if anterior. Este é um método muito útil em programação, mas é preciso tomar cuidado ao utilizá-lo para saber qual bloco else pertence à qual if.

(19)

P r o f . G h u n t e r P a u l o – I n t r o d u ç ã o à L i n g u a g e m C 19 Em C++, o else é ligado ao if mais próximo dentro do mesmo bloco de código que já não tenha uma declaração else associada a ele. Para se certificar de que estamos aninhando os ifs e elses corretamente, utilizamos chaves para delimitar os diferentes blocos, como pode ser visto no código abaixo:

if ( x > 10) {

if ( x == 17) {

cout<< “x é maior que 10 e igual a 17”;

} else {

cout<< “x é maior que 10 mas não é igual a 17”;

} }

else {

cout << “x é menor do que 10”;

}

Note que a segunda declaração if está totalmente contida pelas chaves da primeira declaração if. Utilizou-se chaves em todas os blocos de comando, para melhor separar as condições dos blocos de comandos. Além disso, note o uso da tabulação para separar visualmente os diferentes blocos e declarações:

poderíamos escrever todo o código sem usar tabulação, alinhando todas as linhas à esquerda, mas isto dificultaria a identificação das diferentes declarações.

O Encadeamento if – else if

Utilizamos a variação “if – else if” quando desejamos que o programa teste várias condições em sequência, até encontrar uma que seja verdadeira. Sua sintaxe é muito parecida com a declaração if simples:

(20)

P r o f . G h u n t e r P a u l o – I n t r o d u ç ã o à L i n g u a g e m C 20 if (condição)

{

comandos;

}

else if (condição) {

comandos;

}

else if (condição) {

comandos;

} else {

comandos;

}

Cada bloco “else if” deverá testar uma condição diferente. O programa testará todas as condições na sequência, de cima para baixo, até encontrar uma condição verdadeira. Quando isto acontece, os comandos pertencentes ao bloco

“verdadeiro” serão executados enquanto todos os outros blocos do encadeamento são ignorados. Caso nenhuma condição “else if” seja verdadeira, executa-se o bloco de comandos pertencente ao else final. Note que o else é opcional: Se o else final não estiver presente e todas as outras condições forem falsas, então nenhuma ação será realizada.

Utilizando este encadeamento, ampliaremos o programa anterior para que ele teste várias condições sobre um número enviado pelo usuário, até encontrar uma condição verdadeira.

#include <iostream>

using namespace std;

int main() {

int teste;

cout<<"Digite um numero qualquer:\n";

cin>> teste;

if (teste <= 50) {

cout<<"O número que você digitou é menor que 50\n";

}

else if (teste > 50 && teste <= 100) {

cout<<"O número digitado é maior que 50 e menor ou igual a 100\n";

}

else if (teste > 100 && teste <= 200)

(21)

P r o f . G h u n t e r P a u l o – I n t r o d u ç ã o à L i n g u a g e m C 21 {

cout<<"O número digitado é maior que 100 e menor ou igual a 200\n";

} else {

cout<<"O numero digitado é maior que 200\n";

}

return(0);

}

A Declaração Switch

A declaração switch é uma maneira fácil e elegante de se fazer uma tomada de decisão com múltiplas escolhas. Na declaração switch, a variável é sucessivamente testada

contra uma lista de inteiros ou constantes caractere. Quando uma associação é encontrada,

o conjunto de comandos associado com a constante é executado. Veja a sintaxe de switch abaixo:

switch ( variável ) {

case valor1:

comandos;

break;

case valor2:

comandos;

break;

...

case valorx;

comandos;

break;

default:

comandos;

}

A declaração switch testa o valor de uma única variável. Note que existem vários “case”, cada um associado a um determinado valor. A declaração comparará o valor da variável com o valor de cada um dos “case”: quando uma associação é encontrada, os comandos pertencentes ao “case” relacionado são executados. Se nenhuma associação for encontrada, a declaração switch executará os comandos pertencentes ao bloco default (note que o bloco default é opcional: caso ele não exista, caso nenhuma associação seja encontrada a

(22)

P r o f . G h u n t e r P a u l o – I n t r o d u ç ã o à L i n g u a g e m C 22 declaração switch termina sem que nenhum comando seja executado). O exemplo abaixo demonstra uma utilização da declaração switch.

#include <iostream>

using namespace std;

int main() {

int option;

cout<<"Digite a opção desejada:\n";

cout<<"1. Opção 1\n";

cout<<"2. Opção 2\n";

cout<<"3. Opção 3\n";

option = 0;

cin>> option;

switch(option) {

case 1:

cout<<"Você escolheu a primeira opção\n";

break;

case 2:

cout<<"Você escolheu a segunda opção\n";

break;

case 3:

cout<<"Você escolheu a terceira opção\n";

break;

default:

cout<<"Você escolheu uma opção inválida!\n";

}

Return(0);

}

Após o fim de cada bloco de comandos “case”, é comum utilizar o comando

“break;”. Este comando interrompe a execução do laço em que o programa se encontra, fazendo com que o programa prossiga para o próximo comando imediatamente após o laço. No caso de switch, o comando break assegura que a execução da declaração switch termine, forçando o programa à voltar para sua execução normal. Caso omitíssemos os comandos break; no fim de cada bloco, a declaração switch executaria os comandos presentes no “case” em que a associação foi encontrada, e continuaria a executar todos os comandos presentes em todos os “case” na sequência (incluindo o bloco default) até o término da declaração switch. Note que este comportamento pode ser útil em alguns programas, como por exemplo uma sequência de operações matemáticas onde utilizamos a declaração switch para escolher o ponto de partida da sequência.

(23)

P r o f . G h u n t e r P a u l o – I n t r o d u ç ã o à L i n g u a g e m C 23

Nota:

Este material faz parte de um trabalho de conclusão de curso de Enrique Camargo Trevelin de Ilha Solteira, São Paulo.

Referências

Documentos relacionados

Os testes de desequilíbrio de resistência DC dentro de um par e de desequilíbrio de resistência DC entre pares se tornarão uma preocupação ainda maior à medida que mais

Combinados, o rádio portátil APX 8000XE habilitado para todas bandas e o microfone falante remoto XE500 criam uma solução de missão crítica incomparável, projetada para o pessoal

3 O presente artigo tem como objetivo expor as melhorias nas praticas e ferramentas de recrutamento e seleção, visando explorar o capital intelectual para

Estenda a garantia do seu computador para 5 anos, com atendimento no local no próximo dia útil. HP CARE PACK

II - os docentes efetivos, com regime de trabalho de 20 (vinte) horas semanais, terão sua carga horária alocada, preferencialmente, para ministrar aulas, sendo o mínimo de 8 (oito)

Para o Planeta Orgânico (2010), o crescimento da agricultura orgânica no Brasil e na América Latina dependerá, entre outros fatores, de uma legislação eficiente

O destaque é dado às palavras que abrem signi- ficados e assim são chaves para conceitos que fluem entre prática poética na obra de arte e sua reflexão em texto científico..

Para preparar a pimenta branca, as espigas são colhidas quando os frutos apresentam a coloração amarelada ou vermelha. As espigas são colocadas em sacos de plástico trançado sem