| | | |

Minicurso de C++ para Matemática

Ajude a manter o site livre, gratuito e sem propagandas. Colabore!

2 Elementos da linguagem

2.1 Tipos de dados básicos

Na linguagem C++, dados são alocados em variáveis com tipos declarados. Por exemplo, estudemos o seguinte código.

Código 2: dados.cpp
1#include <iostream>
2#include <string>
3
4int main()
5{
6 // var inteira
7 int i = 1;
8
9 // var pto flutuante
10 double x;
11 x = 2.5;
12
13 // var string
14 std::string s = "i + x";
15
16 double y = i + x;
17
18 std::cout << "i = " << i << std::endl
19 << "x = " << x << std::endl
20 << "s = " << s << std::endl;
21 std::cout << std::scientific
22 << "y = " << y << std::endl;
23
24 return 0;
25}

Na linha 7, é declarada uma variável do tipo int (número inteiro) com identificador i e inicializada com valor 1. Na linha 10, é declarada uma variável do tipo double (número decimal em ponto flutuante de 64 bits) com identificador x. Na linha 14, é declarada e inicializada uma string22endnote: 2string é um arranjo de caracteres..

2.1.1 Notação científica

Podemos usar notação científica em C++. Por exemplo 5.2×102 é digitado da seguinte forma 5.2e-2.

Código 3: notacaoCientifica.cpp
1#include <iostream>
2#include <iomanip>
3
4int main()
5{
6 int i = -51;
7 double x = 5.2e-2;
8
9 // imprime inteiro i
10 std::cout << "i = "
11 << i << std::endl;
12 // imprime x com notação decimal fixada
13 std::cout << "x = "
14 << std::fixed << x << std::endl;
15 // imprime x com notação científica
16 std::cout << "x = "
17 << std::scientific
18 << std::setprecision(2)
19 << x << std::endl;
20
21 return 0;
22}
Exercício 2.1.1.

Antes de implementar, diga qual o valor de x após as seguintes instruções.

1int x = 1;
2int y = x;
3y = 0;

Justifique e verifique sua resposta.

Resposta 0.

x == 1.

Exercício 2.1.2.

Implemente um código em que a/o usuária/o entra com valores para as variáveis x e y. Então, os valores das variáveis são permutados entre si. Dica: a entrada de dados por usuária/o pode ser feita com a instrução std::cin. Por exemplo, para a variável x, usamos std::cin >> x.

Resposta 0.
1#include <iostream>
2
3int main()
4{
5 double x, y;
6
7 // leitura
8 std::cout << "Digite um valor para x: ";
9 std::cin >> x;
10 std::cout << "Digite um valor para y: ";
11 std::cin >> y;
12
13 // permutação de valores
14 double tmp = x;
15 x = y;
16 y = tmp;
17
18 // imprime novos valores
19 std::cout << "x = " << x << std::endl
20 << "y = " << y << std::endl;
21
22 return 0;
23}

2.2 Operações aritméticas elementares

Os operadores aritméticos elementares são

  • *, /, % multiplicação, divisão, módulo

  • +, - adição, subtração

em ordem de precedência33endnote: 3Consulte mais informações sobre a precedência de operadores em C++ Operator Precedence.. O operador módulo % computa o resto da divisão inteira, por exemplo, 5\%2 é igual a 1.

Por exemplo, a computação

12+17%9/2*2-1

resulta no valor 9. De fato, nesta instrução as operações são computadas na seguinte ordem %, /, *, + e -.

As operações *, / e % têm precedência maior que as operações + e -. Operações de mesma precedência seguem a ordem da esquerda para direita, conforme escritas na linha de comando. Usa-se parênteses para alterar a precedência entre as operações, por exemplo

1(2+17)%9/2*2-1

computa o resultado -1. De fato, a divisão inteira está sendo usada. Para computar a divisão em ponto flutuante, um dos operandos deve ser double. Podemos fazer um casting

1double((2+17)%9)/2*2-1

ou, simplesmente, entrar com um número decimal

1(2+17)%9/2.0*2-1
Exercício 2.2.1.

Escreva um programa para computar o vértice da parábola

p(x)=ax2+bx+c, (1)

para a=2, b=2 e c=4.

Resposta 0.

(12,72)

Exercício 2.2.2.

Use C++ para computar os inteiros não negativos q e r tais que

25=q3+r, (2)

sendo r o menor possível.

Resposta 0.
1int q = 25/3;
2int r = 25%3;

2.3 Funções e constantes elementares

A biblioteca C++ cmath.h disponibiliza várias funções e constantes elementares. Por exemplo, o seguinte código imprime os valores de π, 2 e lne.

Código 4: math.cpp
1#include <iostream>
2#include <cmath>
3
4int main()
5{
6 std::cout << "pi = "
7 << M_PI << std::endl;
8 std::cout << "2^(1/2) = "
9 << sqrt(2) << std::endl;
10 std::cout << "log(e) = "
11 << log(M_E) << std::endl;
12
13 return 0;
14}

Para compilar e lincar a biblioteca <cmath>, usamos o seguinte comando

1 $ g++ math.cpp -lm
Observação 2.3.1.(Logaritmo Natural)

Notemos que log é a função logaritmo natural, i.e. ln(x)=loge(x). A implementação C++ para o logaritmo de base 10 é log10.

Exercício 2.3.1.

Compute

  1. a)

    sen(π4)

  2. b)

    log3(π)

  3. c)

    elog2(π)

  4. d)

    273

Exercício 2.3.2.

Faça um código para computar as raízes reais de um polinômio quadrático

p(x)=ax2+bx+c (3)

usando a fórmula de Bhaskara44endnote: 4Bhaskara Akaria, 1114 - 1185, matemático e astrônomo indiano. Fonte: Wikipédia: Bhaskara II.. Teste-o para diferentes conjuntos de coeficientes.

Resposta 0.
1#include <iostream>
2#include <cmath>
3
4int main()
5{
6 // coeficientes
7 double a = 2.0;
8 double b = -2.0;
9 double c = -4.0;
10
11 // discriminante
12 double d = b*b - 4*a*c;
13
14 // raízes
15 double x1 = (-b + sqrt(d)) / (2*a);
16 double x2 = (-b - sqrt(d)) / (2*a);
17
18 // imprime
19 std::cout << "Raízes: " << std::endl
20 << " x1 = " << x1 << std::endl
21 << " x2 = " << x2 << std::endl;
22 return 0;
23}

2.4 Operadores de comparação elementares

Os operadores de comparação elementares são

  • == igual a

  • != diferente de

  • > maior que

  • < menor que

  • >= maior ou igual que

  • <= menor ou igual que

Estes operadores retornam os valores lógicos true (verdadeiro, 1) ou false (falso, 0). Variáveis do tipo bool (variáveis booleanas55endnote: 5George Boole, 1815 - 1864, matemático britânico. Fonte: Wikipédia: George Boole.) são usadas para armazenar valores lógicos.

Por exemplo, estudemos o seguinte código.

Código 5: opComp.cpp
1#include <iostream>
2#include <iomanip>
3
4int main()
5{
6 int x = 2;
7
8 bool res = x + x == 5;
9
10 std::cout << "2 + 2 == 5? "
11 << std::boolalpha
12 << res << std::endl;
13
14 return 0;
15}
Exercício 2.4.1.

Considere a circunferência de equação

c:(x1)2+(y+1)2=1. (4)

Escreva um código em que a(o) usuária(o) entra com as coordenadas de um ponto P=(x,y) e seja verificado se:

  1. a)

    P pertence ao interior de c.

  2. b)

    P pertence à fronteira de c.

  3. c)

    P não pertence à circunferência c.

Resposta 0.
1#include <iostream>
2#include <iomanip>
3
4int main()
5{
6 double x;
7 std::cout << "x: ";
8 std::cin >> x;
9 double y;
10 std::cout << "y: ";
11 std::cin >> y;
12
13 double rhs = (x-1.0)*(x-1.0) + (y+1.0)*(y+1.0);
14 bool interior = rhs < 1.0;
15 bool borda = rhs == 1.0;
16 bool exterior = rhs > 1.0;
17
18 std::cout << "Interior: " << interior << std::endl
19 << "Borda: " << borda << std::endl
20 << "Exterior: " << exterior << std::endl;
21
22 return 0;
23}
Exercício 2.4.2.

Antes de implementar, diga qual é o valor lógico da instrução pow(sqrt(3), 2.0) == 3.0. Justifique sua resposta e verifique!

Resposta 0.

false

2.5 Operadores lógicos elementares

Os operadores lógicos elementares são:

  • and e lógico

  • or ou lógico

  • not não lógico

Por exemplo, a tabela booleana do and é

A B A and B
true true true
true false false
false true false
false false false

O seguinte código, monta essa tabela booleana, verifique!

Código 6: and.cpp
1#include <iostream>
2#include <iomanip>
3
4int main()
5{
6 bool T = true;
7 bool F = false;
8
9 std::cout << "A | B | A and B"
10 << std::endl;
11 std::cout << std::boolalpha
12 << T << " | " << T << " | "
13 << (T and T) << std::endl
14 << T << " | " << F << "| "
15 << (T and F) << std::endl
16 << F << "| " << T << " | "
17 << (F and T) << std::endl
18 << F << "| " << F << "| "
19 << (F and F) << std::endl;
20
21 return 0;
22}
Exercício 2.5.1.

Construa as tabelas booleanas do operador or e do not.

Resposta 0.
A B A or B
true true true
true false true
false true true
false false false
A not(A)
true false
false true
Exercício 2.5.2.

Escreva um código para verificar as seguintes comparações

  1. a)

    1.4<=2<1.5.

  2. b)

    |x|<1, x=sen(π/3).

  3. c)

    |x|>12, x=cos(π2).

Resposta 0.
1#include <iostream>
2#include <iomanip>
3#include <cmath>
4
5int main()
6{
7 std::cout << std::boolalpha;
8
9 // a)
10 std::cout << "a) "
11 << (1.4 <= sqrt(2)) and \
12 (sqrt(2) < 1.5) << std::endl;
13
14 // b)
15 double x = sin(M_PI/3.0);
16 std::cout << "b) "
17 << (fabs(x) < 1.0) << std::endl;
18
19 // c)
20 x = cos(M_PI*M_PI);
21 std::cout << "c) "
22 << (fabs(x) > 0.5) << std::endl;
23
24 return 0;
25}
Exercício 2.5.3.

Considere um retângulo r:ABDC de vértices A=(1,1) e D=(2,3). Crie um código em que a/o usuária/o informa as coordenadas de um ponto P=(x,y) e o código verifica cada um dos seguintes itens:

  1. 1.

    Pr.

  2. 2.

    Pr.

  3. 3.

    Pr¯.

Resposta 0.
1#include <iostream>
2#include <iomanip>
3
4int main()
5{
6 // vértices
7 double Ax = 1.0;
8 double Ay = 1.0;
9
10 double Dx = 2.0;
11 double Dy = 3.0;
12
13 // ponto
14 double x, y;
15 std::cout << "x: ";
16 std::cin >> x;
17 std::cout << "y: ";
18 std::cin >> y;
19
20 // localização
21 bool interior = (Ax < x and x < Dx) and \
22 (Ay < y and y < Dy);
23 bool borda = (Ax == x or Dx == x) and \
24 (Ay <= y and y <= Dy) or \
25 (Ay == y or Dy == y) and \
26 (Ax <= x and x <= Dx);
27 bool exterior = not interior and not borda;
28
29 std::cout << std::boolalpha
30 << "P in r: "
31 << interior << std::endl
32 << "P on \\partial r: "
33 << borda << std::endl
34 << "P not in \\hat r: "
35 << exterior << std::endl;
36
37 return 0;
38}
Exercício 2.5.4.

Implemente uma instrução para computar o operador xor (ou exclusivo). Dadas duas afirmações A e B, A xor B é true no caso de uma, e somente uma, das afirmações ser true, caso contrário é false.

Resposta 0.

(A or B) and not(A and B)

2.6 Ponteiros

Um ponteiro é uma variável que armazena o endereço de outra variável. Podemos declarar um ponteiro para qualquer tipo de variável em C++. Por exemplo, vamos estudemos o seguinte código.

1#include <iostream>
2
3int main()
4{
5 // ponteiro
6 int *ptr;
7
8 // variáveis
9 int x = 10;
10 int y = 20;
11
12 // endereço de x
13 ptr = &x;
14 std::cout << "&x = " << ptr << std::endl;
15
16 // altera o valor de x
17 *ptr = 30;
18 std::cout << "x = " << x << std::endl;
19
20 // endereço de y
21 ptr = &y;
22 std::cout << "&y = " << ptr << std::endl;
23
24 //altera o valor de y
25 y = 40;
26 std::cout << "y = " << *ptr << std::endl;
27
28 return 0;
29}

Na linha 6, declaramos um ponteiro para um inteiro. Na linha 13, atribuímos o endereço da variável x ao ponteiro ptr. O operador & retorna o endereço de uma variável. Na linha 17, alteramos o valor da variável x através do ponteiro ptr. O operador * retorna o valor armazenado no endereço apontado pelo ponteiro. Na linha 21, atribuímos o endereço da variável y ao ponteiro ptr. Na linha 19, alteramos o valor da variável y. Por fim na linha 26, imprimimos o valor da variável y através do ponteiro ptr.

Exercício 2.6.1.

Após as seguintes instruções serem executadas, os endereços das variáveis x e y são iguais? Justifique e verifique sua resposta.

1double x = 2.5;
2double y = -1.41;
3x = y;
Resposta 0.

Não. Ao serem declaradas as variáveis x e y são alocadas em endereços diferentes. A instrução x = y copia o valor de y (alocado no endereço &y) para x (alocada em outro endereço &x).

Exercício 2.6.2.

Sem executar, diga qual é o valor da variável y ao final da execução das seguintes instruções. Justifique e verifique sua resposta.

1double x = 2.5;
2double y = -1.25;
3double *ptr = &x;
4y += x**ptr;
Resposta 0.

y == 5.0.


Envie seu comentário

Aproveito para agradecer a todas/os que de forma assídua ou esporádica contribuem enviando correções, sugestões e críticas!

Opcional. Preencha seu nome para que eu possa lhe contatar.
Opcional. Preencha seu e-mail para que eu possa lhe contatar.
As informações preenchidas são enviadas por e-mail para o desenvolvedor do site e tratadas de forma privada. Consulte a política de uso de dados para mais informações.

Licença Creative Commons
Este texto é disponibilizado nos termos da Licença Creative Commons Atribuição-CompartilhaIgual 4.0 Internacional. Ícones e elementos gráficos podem estar sujeitos a condições adicionais.

Minicurso de C++ para Matemática

Ajude a manter o site livre, gratuito e sem propagandas. Colabore!

2 Elementos da linguagem

2.1 Tipos de dados básicos

Na linguagem C++, dados são alocados em variáveis com tipos declarados. Por exemplo, estudemos o seguinte código.

Código 2: dados.cpp
1#include <iostream>
2#include <string>
3
4int main()
5{
6 // var inteira
7 int i = 1;
8
9 // var pto flutuante
10 double x;
11 x = 2.5;
12
13 // var string
14 std::string s = "i + x";
15
16 double y = i + x;
17
18 std::cout << "i = " << i << std::endl
19 << "x = " << x << std::endl
20 << "s = " << s << std::endl;
21 std::cout << std::scientific
22 << "y = " << y << std::endl;
23
24 return 0;
25}

Na linha 7, é declarada uma variável do tipo int (número inteiro) com identificador i e inicializada com valor 1. Na linha 10, é declarada uma variável do tipo double (número decimal em ponto flutuante de 64 bits) com identificador x. Na linha 14, é declarada e inicializada uma string22endnote: 2string é um arranjo de caracteres..

2.1.1 Notação científica

Podemos usar notação científica em C++. Por exemplo 5.2×102 é digitado da seguinte forma 5.2e-2.

Código 3: notacaoCientifica.cpp
1#include <iostream>
2#include <iomanip>
3
4int main()
5{
6 int i = -51;
7 double x = 5.2e-2;
8
9 // imprime inteiro i
10 std::cout << "i = "
11 << i << std::endl;
12 // imprime x com notação decimal fixada
13 std::cout << "x = "
14 << std::fixed << x << std::endl;
15 // imprime x com notação científica
16 std::cout << "x = "
17 << std::scientific
18 << std::setprecision(2)
19 << x << std::endl;
20
21 return 0;
22}
Exercício 2.1.1.

Antes de implementar, diga qual o valor de x após as seguintes instruções.

1int x = 1;
2int y = x;
3y = 0;

Justifique e verifique sua resposta.

Resposta 0.

x == 1.

Exercício 2.1.2.

Implemente um código em que a/o usuária/o entra com valores para as variáveis x e y. Então, os valores das variáveis são permutados entre si. Dica: a entrada de dados por usuária/o pode ser feita com a instrução std::cin. Por exemplo, para a variável x, usamos std::cin >> x.

Resposta 0.
1#include <iostream>
2
3int main()
4{
5 double x, y;
6
7 // leitura
8 std::cout << "Digite um valor para x: ";
9 std::cin >> x;
10 std::cout << "Digite um valor para y: ";
11 std::cin >> y;
12
13 // permutação de valores
14 double tmp = x;
15 x = y;
16 y = tmp;
17
18 // imprime novos valores
19 std::cout << "x = " << x << std::endl
20 << "y = " << y << std::endl;
21
22 return 0;
23}

2.2 Operações aritméticas elementares

Os operadores aritméticos elementares são

  • *, /, % multiplicação, divisão, módulo

  • +, - adição, subtração

em ordem de precedência33endnote: 3Consulte mais informações sobre a precedência de operadores em C++ Operator Precedence.. O operador módulo % computa o resto da divisão inteira, por exemplo, 5\%2 é igual a 1.

Por exemplo, a computação

12+17%9/2*2-1

resulta no valor 9. De fato, nesta instrução as operações são computadas na seguinte ordem %, /, *, + e -.

As operações *, / e % têm precedência maior que as operações + e -. Operações de mesma precedência seguem a ordem da esquerda para direita, conforme escritas na linha de comando. Usa-se parênteses para alterar a precedência entre as operações, por exemplo

1(2+17)%9/2*2-1

computa o resultado -1. De fato, a divisão inteira está sendo usada. Para computar a divisão em ponto flutuante, um dos operandos deve ser double. Podemos fazer um casting

1double((2+17)%9)/2*2-1

ou, simplesmente, entrar com um número decimal

1(2+17)%9/2.0*2-1
Exercício 2.2.1.

Escreva um programa para computar o vértice da parábola

p(x)=ax2+bx+c, (1)

para a=2, b=2 e c=4.

Resposta 0.

(12,72)

Exercício 2.2.2.

Use C++ para computar os inteiros não negativos q e r tais que

25=q3+r, (2)

sendo r o menor possível.

Resposta 0.
1int q = 25/3;
2int r = 25%3;

2.3 Funções e constantes elementares

A biblioteca C++ cmath.h disponibiliza várias funções e constantes elementares. Por exemplo, o seguinte código imprime os valores de π, 2 e lne.

Código 4: math.cpp
1#include <iostream>
2#include <cmath>
3
4int main()
5{
6 std::cout << "pi = "
7 << M_PI << std::endl;
8 std::cout << "2^(1/2) = "
9 << sqrt(2) << std::endl;
10 std::cout << "log(e) = "
11 << log(M_E) << std::endl;
12
13 return 0;
14}

Para compilar e lincar a biblioteca <cmath>, usamos o seguinte comando

1 $ g++ math.cpp -lm
Observação 2.3.1.(Logaritmo Natural)

Notemos que log é a função logaritmo natural, i.e. ln(x)=loge(x). A implementação C++ para o logaritmo de base 10 é log10.

Exercício 2.3.1.

Compute

  1. a)

    sen(π4)

  2. b)

    log3(π)

  3. c)

    elog2(π)

  4. d)

    273

Exercício 2.3.2.

Faça um código para computar as raízes reais de um polinômio quadrático

p(x)=ax2+bx+c (3)

usando a fórmula de Bhaskara44endnote: 4Bhaskara Akaria, 1114 - 1185, matemático e astrônomo indiano. Fonte: Wikipédia: Bhaskara II.. Teste-o para diferentes conjuntos de coeficientes.

Resposta 0.
1#include <iostream>
2#include <cmath>
3
4int main()
5{
6 // coeficientes
7 double a = 2.0;
8 double b = -2.0;
9 double c = -4.0;
10
11 // discriminante
12 double d = b*b - 4*a*c;
13
14 // raízes
15 double x1 = (-b + sqrt(d)) / (2*a);
16 double x2 = (-b - sqrt(d)) / (2*a);
17
18 // imprime
19 std::cout << "Raízes: " << std::endl
20 << " x1 = " << x1 << std::endl
21 << " x2 = " << x2 << std::endl;
22 return 0;
23}

2.4 Operadores de comparação elementares

Os operadores de comparação elementares são

  • == igual a

  • != diferente de

  • > maior que

  • < menor que

  • >= maior ou igual que

  • <= menor ou igual que

Estes operadores retornam os valores lógicos true (verdadeiro, 1) ou false (falso, 0). Variáveis do tipo bool (variáveis booleanas55endnote: 5George Boole, 1815 - 1864, matemático britânico. Fonte: Wikipédia: George Boole.) são usadas para armazenar valores lógicos.

Por exemplo, estudemos o seguinte código.

Código 5: opComp.cpp
1#include <iostream>
2#include <iomanip>
3
4int main()
5{
6 int x = 2;
7
8 bool res = x + x == 5;
9
10 std::cout << "2 + 2 == 5? "
11 << std::boolalpha
12 << res << std::endl;
13
14 return 0;
15}
Exercício 2.4.1.

Considere a circunferência de equação

c:(x1)2+(y+1)2=1. (4)

Escreva um código em que a(o) usuária(o) entra com as coordenadas de um ponto P=(x,y) e seja verificado se:

  1. a)

    P pertence ao interior de c.

  2. b)

    P pertence à fronteira de c.

  3. c)

    P não pertence à circunferência c.

Resposta 0.
1#include <iostream>
2#include <iomanip>
3
4int main()
5{
6 double x;
7 std::cout << "x: ";
8 std::cin >> x;
9 double y;
10 std::cout << "y: ";
11 std::cin >> y;
12
13 double rhs = (x-1.0)*(x-1.0) + (y+1.0)*(y+1.0);
14 bool interior = rhs < 1.0;
15 bool borda = rhs == 1.0;
16 bool exterior = rhs > 1.0;
17
18 std::cout << "Interior: " << interior << std::endl
19 << "Borda: " << borda << std::endl
20 << "Exterior: " << exterior << std::endl;
21
22 return 0;
23}
Exercício 2.4.2.

Antes de implementar, diga qual é o valor lógico da instrução pow(sqrt(3), 2.0) == 3.0. Justifique sua resposta e verifique!

Resposta 0.

false

2.5 Operadores lógicos elementares

Os operadores lógicos elementares são:

  • and e lógico

  • or ou lógico

  • not não lógico

Por exemplo, a tabela booleana do and é

A B A and B
true true true
true false false
false true false
false false false

O seguinte código, monta essa tabela booleana, verifique!

Código 6: and.cpp
1#include <iostream>
2#include <iomanip>
3
4int main()
5{
6 bool T = true;
7 bool F = false;
8
9 std::cout << "A | B | A and B"
10 << std::endl;
11 std::cout << std::boolalpha
12 << T << " | " << T << " | "
13 << (T and T) << std::endl
14 << T << " | " << F << "| "
15 << (T and F) << std::endl
16 << F << "| " << T << " | "
17 << (F and T) << std::endl
18 << F << "| " << F << "| "
19 << (F and F) << std::endl;
20
21 return 0;
22}
Exercício 2.5.1.

Construa as tabelas booleanas do operador or e do not.

Resposta 0.
A B A or B
true true true
true false true
false true true
false false false
A not(A)
true false
false true
Exercício 2.5.2.

Escreva um código para verificar as seguintes comparações

  1. a)

    1.4<=2<1.5.

  2. b)

    |x|<1, x=sen(π/3).

  3. c)

    |x|>12, x=cos(π2).

Resposta 0.
1#include <iostream>
2#include <iomanip>
3#include <cmath>
4
5int main()
6{
7 std::cout << std::boolalpha;
8
9 // a)
10 std::cout << "a) "
11 << (1.4 <= sqrt(2)) and \
12 (sqrt(2) < 1.5) << std::endl;
13
14 // b)
15 double x = sin(M_PI/3.0);
16 std::cout << "b) "
17 << (fabs(x) < 1.0) << std::endl;
18
19 // c)
20 x = cos(M_PI*M_PI);
21 std::cout << "c) "
22 << (fabs(x) > 0.5) << std::endl;
23
24 return 0;
25}
Exercício 2.5.3.

Considere um retângulo r:ABDC de vértices A=(1,1) e D=(2,3). Crie um código em que a/o usuária/o informa as coordenadas de um ponto P=(x,y) e o código verifica cada um dos seguintes itens:

  1. 1.

    Pr.

  2. 2.

    Pr.

  3. 3.

    Pr¯.

Resposta 0.
1#include <iostream>
2#include <iomanip>
3
4int main()
5{
6 // vértices
7 double Ax = 1.0;
8 double Ay = 1.0;
9
10 double Dx = 2.0;
11 double Dy = 3.0;
12
13 // ponto
14 double x, y;
15 std::cout << "x: ";
16 std::cin >> x;
17 std::cout << "y: ";
18 std::cin >> y;
19
20 // localização
21 bool interior = (Ax < x and x < Dx) and \
22 (Ay < y and y < Dy);
23 bool borda = (Ax == x or Dx == x) and \
24 (Ay <= y and y <= Dy) or \
25 (Ay == y or Dy == y) and \
26 (Ax <= x and x <= Dx);
27 bool exterior = not interior and not borda;
28
29 std::cout << std::boolalpha
30 << "P in r: "
31 << interior << std::endl
32 << "P on \\partial r: "
33 << borda << std::endl
34 << "P not in \\hat r: "
35 << exterior << std::endl;
36
37 return 0;
38}
Exercício 2.5.4.

Implemente uma instrução para computar o operador xor (ou exclusivo). Dadas duas afirmações A e B, A xor B é true no caso de uma, e somente uma, das afirmações ser true, caso contrário é false.

Resposta 0.

(A or B) and not(A and B)

2.6 Ponteiros

Um ponteiro é uma variável que armazena o endereço de outra variável. Podemos declarar um ponteiro para qualquer tipo de variável em C++. Por exemplo, vamos estudemos o seguinte código.

1#include <iostream>
2
3int main()
4{
5 // ponteiro
6 int *ptr;
7
8 // variáveis
9 int x = 10;
10 int y = 20;
11
12 // endereço de x
13 ptr = &x;
14 std::cout << "&x = " << ptr << std::endl;
15
16 // altera o valor de x
17 *ptr = 30;
18 std::cout << "x = " << x << std::endl;
19
20 // endereço de y
21 ptr = &y;
22 std::cout << "&y = " << ptr << std::endl;
23
24 //altera o valor de y
25 y = 40;
26 std::cout << "y = " << *ptr << std::endl;
27
28 return 0;
29}

Na linha 6, declaramos um ponteiro para um inteiro. Na linha 13, atribuímos o endereço da variável x ao ponteiro ptr. O operador & retorna o endereço de uma variável. Na linha 17, alteramos o valor da variável x através do ponteiro ptr. O operador * retorna o valor armazenado no endereço apontado pelo ponteiro. Na linha 21, atribuímos o endereço da variável y ao ponteiro ptr. Na linha 19, alteramos o valor da variável y. Por fim na linha 26, imprimimos o valor da variável y através do ponteiro ptr.

Exercício 2.6.1.

Após as seguintes instruções serem executadas, os endereços das variáveis x e y são iguais? Justifique e verifique sua resposta.

1double x = 2.5;
2double y = -1.41;
3x = y;
Resposta 0.

Não. Ao serem declaradas as variáveis x e y são alocadas em endereços diferentes. A instrução x = y copia o valor de y (alocado no endereço &y) para x (alocada em outro endereço &x).

Exercício 2.6.2.

Sem executar, diga qual é o valor da variável y ao final da execução das seguintes instruções. Justifique e verifique sua resposta.

1double x = 2.5;
2double y = -1.25;
3double *ptr = &x;
4y += x**ptr;
Resposta 0.

y == 5.0.


Envie seu comentário

Aproveito para agradecer a todas/os que de forma assídua ou esporádica contribuem enviando correções, sugestões e críticas!

Opcional. Preencha seu nome para que eu possa lhe contatar.
Opcional. Preencha seu e-mail para que eu possa lhe contatar.
As informações preenchidas são enviadas por e-mail para o desenvolvedor do site e tratadas de forma privada. Consulte a política de uso de dados para mais informações.

Licença Creative Commons
Este texto é disponibilizado nos termos da Licença Creative Commons Atribuição-CompartilhaIgual 4.0 Internacional. Ícones e elementos gráficos podem estar sujeitos a condições adicionais.

Pedro H A Konzen
| | | |