Escolar Documentos
Profissional Documentos
Cultura Documentos
Lista: Unidade 2
Professor: Daniel Luis Cosmo
ENGENHARIA DA COMPUTAÇÃO
CÓDIGO: D009053
Aluno: Roberli Schuina Silva
RA: 23110406
Período: 2023/2
Turma: CI-1030-231-A
1. Cite e descreva duas variáveis definidas na biblioteca iostream que são utilizadas para
entrada e saída de dados do programa.
Na biblioteca <iostream>, duas variáveis fundamentais são comumente utilizadas para entrada
e saída de dados em um programa C++: cin e cout.
a) ‘cin’: É a variável usada para entrada padrão, normalmente associada à leitura de dados
do teclado. Ela é usada em conjunto com o operador ‘>>’ para receber dados digitados
pelo usuário.
Exemplo de uso:
int idade;
std::cout << "Digite sua idade: ";
std::cin >> idade;
b) ‘cout’: É a variável usada para saída padrão, normalmente associada à exibição de dados
no console. Ela é usada em conjunto com o operador << para imprimir informações na
tela.
Essas variáveis são essenciais para interagir com o usuário e exibir informações relevantes no
programa.
Portanto, ao utilizar cin para entrada de dados, o programa espera que o usuário forneça
esses dados através do teclado. Da mesma forma, ao usar cout para a saída de dados, o
programa exibirá as informações na tela do console.
Essa configuração padrão permite a interação básica com o usuário por meio do terminal,
sendo um meio comum para entrada e saída de dados em muitos programas.
PÚBLICA
3. Qual comando deve ser usado para incluir o uso de uma biblioteca no programa que
está sendo desenvolvido?
Para incluir o uso de uma biblioteca em um programa C++, deve-se usar a diretiva #include.
A #include é usada para incorporar o conteúdo de um arquivo de cabeçalho (header file) na
sua fonte, o que torna as definições e funcionalidades da biblioteca disponíveis para o seu
programa. Aqui está a sintaxe básica da diretiva #include: #include <nome_da_biblioteca>
Esses operadores são vitais para a entrada e saída de dados em C++. O operador >> lê dados
de uma fonte (como o teclado) e os armazena em uma variável, enquanto o operador << exibe
dados na saída padrão (como a tela).
O manipulador std::endl é usado para inserir uma quebra de linha e "limpar" o buffer de
saída. Ele é definido na biblioteca <iostream> em C++ e tem a seguinte função:
a) Quebra de Linha: std::endl é usado para adicionar uma nova linha (ou quebra de linha)
à saída. Exemplo de uso: std::cout << "Olá, mundo!" << std::endl; Isso resultará na
impressão de "Olá, mundo!" seguido de uma nova linha;
b) Limpar o Buffer de Saída: Além de adicionar uma nova linha, std::endl também força
a limpeza do buffer de saída. Isso significa que quaisquer dados pendentes no buffer
PÚBLICA
serão imediatamente escritos no dispositivo de saída. Exemplo de uso combinado:
std::cout << "Olá, mundo!" << std::endl;
Para o exemplo, não apenas uma nova linha é adicionada após "Olá, mundo!", mas o buffer é
limpo, garantindo que a saída seja exibida imediatamente.
O uso de std::endl é semelhante a usar '\n' para inserir uma nova linha. No entanto, std::endl é
mais flexível e portátil, pois leva em consideração as configurações de novas linhas específicas
do sistema operacional, enquanto '\n' pode não se comportar da mesma forma em todos os
sistemas.
A palavra "std" em C++ é um prefixo usado para indicar que você está usando um elemento
(como uma função, classe, variável) do namespace padrão da biblioteca padrão do C++,
chamada de "Standard Template Library" (STL).
"std": É uma abreviação de "standard", que denota o padrão estabelecido pela linguagem
C++ para suas bibliotecas e funcionalidades básicas.
Namespace "std": O namespace "std" é usado para organizar todas as classes, funções e
objetos relacionados à biblioteca padrão do C++. Ao usar o prefixo "std::" antes de um
elemento (por exemplo, std::cout), você está especificando que deseja usar esse elemento
do namespace padrão.
Por exemplo, ao usar std::cout, você está acessando a função cout que faz parte do
namespace std e é usada para imprimir dados na saída padrão. Este é um mecanismo que
ajuda a evitar conflitos de nome entre diferentes bibliotecas e partes do código.
8. Qual é o tamanho em Bytes dos tipos primitivos bool, char, int e double?
PÚBLICA
O tamanho em bytes dos tipos primitivos em C++ pode variar dependendo da
implementação, do compilador e da arquitetura do sistema. No entanto, algumas
informações típicas sobre o tamanho desses tipos de dados com base em convenções
comuns são:
a) bool: O tamanho do tipo bool pode variar, mas geralmente é implementado como 1
byte (8 bits). Em alguns casos, pode ser armazenado como um bit apenas, mas isso
depende da implementação;
b) char: O tamanho do tipo char é sempre 1 byte. Em C++, por definição, um char é
composto por pelo menos 8 bits;
Exemplo:
#include <iostream>
int main() {
std::cout << "Tamanho de bool: " << sizeof(bool) << " bytes\n";
std::cout << "Tamanho de char: " << sizeof(char) << " bytes\n";
std::cout << "Tamanho de int: " << sizeof(int) << " bytes\n";
std::cout << "Tamanho de double: " << sizeof(double) << " bytes\n";
return 0;
}
Uma variável em C++ é definida especificando o tipo de dados da variável, seguido pelo
nome da variável. Aqui está a sintaxe geral para definir uma variável em C++: tipo_de_dados
nome_da_variavel;
Onde:
▪ tipo_de_dados é o tipo de dados da variável, como int, double, char, bool etc.
▪ nome_da_variavel é o nome que você escolhe para a variável.
a) Inteiro (‘int’):int idade; // Define uma variável chamada "idade" do tipo inteiro
PÚBLICA
b) Ponto flutuante (‘double’): double salario; // Define uma variável chamada "salario" do
tipo double
c) Caractere (’char’): char letra; // Define uma variável chamada "letra" do tipo char
Em C++ moderno, é uma boa prática inicializar as variáveis no momento da definição. Por
exemplo: int idade = 30; // Define e inicializa a variável "idade" com o valor 30. Assim, a
variável está pronta para ser usada com o valor inicial especificado.
10. Variáveis do tipo unsigned int e signed int conseguem representar a mesma
quantidade de valores?
Não, as variáveis do tipo unsigned int e signed int não conseguem representar a mesma
quantidade de valores. Detalhamos abaixo a diferença entre elas e como isso afeta a faixa
de valores que cada tipo pode representar:
a) ‘signed int’:
▪ É um tipo de dados que pode representar valores inteiros, positivos e negativos;
▪ Dedica um bit para representar o sinal (positivo ou negativo) e os outros bits para o
valor absoluto;
▪ A faixa de valores que um signed int pode representar varia dependendo da
implementação, mas é comumente de -2,147,483,648 a 2,147,483,647 para uma
arquitetura de 32 bits.
b) ‘unsigned int’:
▪ É um tipo de dados que representa apenas valores inteiros não negativos;
▪ Todos os bits são usados para representar o valor absoluto;
▪ Como não precisa representar o sinal, a faixa de valores que um unsigned int pode
representar é de 0 a 4,294,967,295 para uma arquitetura de 32 bits.
11. Descreva a diferença fundamental entre uma variável do tipo int e uma variável do tipo
const int.
A diferença fundamental está na capacidade de modificar seu valor após a declaração. Uma
variável do tipo int é uma variável inteira que pode ser modificada após sua inicialização,
sendo possível atribuir novos valores a uma variável int.
PÚBLICA
Uma variável do tipo const int é uma constante inteira, ou seja, seu valor não pode ser
alterado após sua inicialização. Tentativas de modificar o valor de uma variável const int
resultarão em erros de compilação.
Portanto, a principal diferença é que uma variável do tipo int pode ter seu valor alterado após
a inicialização, enquanto uma variável do tipo const int é uma constante e seu valor não pode
ser modificado uma vez que é atribuído. O uso de const é útil quando se deseja garantir que
o valor de uma variável não seja modificado inadvertidamente durante a execução do
programa.
12. Como é possível escrever uma literal do tipo int na notação binária e hexadecimal?
a) Notação Binária: Para escrever um literal de int na notação binária, se pode usar o prefixo
0b (ou 0B) seguido da sequência de dígitos binários (0s e 1s). Exemplo: int binario =
0b101010; // Representa o número binário 101010 em decimal;
Uma referência em C++ é uma forma de criar um "alias" (um apelido) para uma variável
existente. É uma maneira de associar um nome adicional a uma variável já existente, o que
permite manipular a variável por meio desse novo nome.
c) Comportamento de Alias:
PÚBLICA
▪ A referência é um alias para a variável associada; modificar a referência é o mesmo
que modificar a variável original;
▪ Qualquer operação ou modificação feita através da referência é refletida diretamente
na variável original.
d) Sempre Inicializada:
▪ Uma referência deve ser inicializada no momento da sua declaração;
▪ Após a inicialização, ela não pode ser referente a outra variável.
As referências são frequentemente usadas para passar argumentos para funções por
referência, permitindo que a função modifique diretamente a variável original. Além disso,
são úteis para criar "atalhos" para variáveis e evitar a cópia de dados, especialmente ao
trabalhar com grandes objetos ou estruturas.
Um ponteiro em C++ é uma variável que armazena o endereço de memória de outra variável.
Em outras palavras, um ponteiro "aponta" para uma posição na memória onde um valor está
armazenado. Entenderemos como os ponteiros funcionam em detalhes abaixo:
a) Declaração de um Ponteiro:
▪ Um ponteiro é declarado usando o operador * (asterisco) antes do nome do ponteiro;
▪ A sintaxe é: tipo_de_dados *nome_ponteiro.
Exemplo:
int numero = 42; // Declaração de uma variável
int *ponteiro = № / Associa o endereço de 'numero' ao ponteiro
PÚBLICA
e) Ponteiro Nulo:
▪ Um ponteiro pode apontar para nenhum lugar específico, representado pelo valor
nulo (nullptr em C++11 em diante ou NULL em versões mais antigas).
Os ponteiros são frequentemente usados para passar endereços de variáveis para funções,
para alocar memória dinamicamente, para trabalhar com estruturas de dados complexas e
para otimizar o desempenho de certas operações. No entanto, é importante usar ponteiros
com cuidado para evitar erros de acesso indevido à memória e vazamentos de memória.
Os símbolos & e * têm significados distintos dependendo do contexto em que são usados.
Como operadores e como parte de tipos compostos (ponteiros e referências).
a) Operadores & e *:
Exemplo:
int numero = 42;
int *ponteiro = № // & é usado para obter o endereço de 'numero'
➢ (Operador de Desreferência):
▪ Usado para acessar o valor armazenado em um endereço de memória apontado por
um ponteiro.
▪ Sintaxe: *ponteiro.
Exemplo:
int numero = 42;
int *ponteiro = №
int valor = *ponteiro; // * é usado para acessar o valor apontado por 'ponteiro'
Exemplo:
int numero = 42;
int &referencia = numero; // & é usado para declarar uma referência
PÚBLICA
▪ Usado para declarar um ponteiro.
▪ Sintaxe: tipo_de_dados *nome_ponteiro;.
Exemplo:
int numero = 42;
int *ponteiro = № // * é usado para declarar um ponteiro
16. Qual a ordem de precedência dos operadores aritméticos de soma (+), subtração (-),
multiplicação (*), divisão (/) e resto (%)?
A ordem de avaliação pode ser alterada usando parênteses para controlar a sequência das
operações.
Se deseja que a adição seja avaliada antes da multiplicação, é possível utilizar parênteses
para forçar essa ordem:
É sempre uma boa prática usar parênteses para tornar a ordem de avaliação explícita e
evitar ambiguidades, especialmente em expressões complexas.
PÚBLICA
O tipo de dados de saída das operações relacionais em C++ é o tipo bool. As operações
relacionais, como igualdade (==), desigualdade (!=), maior que (>), menor que (<), maior ou
igual a (>=) e menor ou igual a (<=), comparam dois valores e retornam um valor booleano
(true ou false) indicando o resultado da comparação.
Por exemplo:
int a = 10;
int b = 5;
A tabela verdade para as operações lógicas AND (E) e OR (OU) é uma tabela que mostra
todas as combinações possíveis de valores de entrada e os resultados correspondentes da
operação.
A B A AND B
0 0 0
0 1 0
1 0 0
1 1 1
A B A OR B
0 0 0
0 1 1
1 0 1
1 1 1
Na tabela acima:
▪ A e B representam os valores de entrada (0 para falso, 1 para verdadeiro).
▪ A AND B representa o resultado da operação AND entre A e B.
▪ A OR B representa o resultado da operação OR entre A e B.
PÚBLICA
As operações lógicas AND e OR são usadas em lógica booleana para determinar o resultado
baseado nas condições de verdade (1) ou falsidade (0) das proposições envolvidas. O AND
é verdadeiro apenas quando ambas as proposições são verdadeiras, enquanto o OR é
verdadeiro quando pelo menos uma das proposições é verdadeira.
19. Cite três casos em que o valor do lado esquerdo do operador de atribuição não é
compatível.
O lado esquerdo do operador de atribuição em C++ deve ser uma expressão que resulta em
uma localização de memória modificável, ou seja, deve ser uma variável, um elemento de
array ou um objeto que pode ser modificado. Casos em que o lado esquerdo não é
compatível incluem:
a) Constantes Literais:
▪ Não é possível atribuir um valor a uma constante literal.
O valor de retorno de uma função não pode ser usado no lado esquerdo de uma atribuição.
Exemplo:
int funcao() {
return 5;
}
O operador de incremento em C++ é usado para aumentar o valor de uma variável por 1. A
diferença entre o operador de incremento quando aparece antes (++variavel) ou depois
(variavel++) da variável incrementada está relacionada ao momento em que a variável é
incrementada e o valor retornado na expressão.
PÚBLICA
a) Operador de Incremento Pré-fixo (++variavel):
▪ Incrementa a variável antes de usar seu valor na expressão.
▪ Retorna o valor incrementado.
Exemplo:
int a= 5;
int b= ++a; // 'a' é incrementado antes de atribuir seu valor a 'b' // Agora, a= 6 e b= 6
Exemplo:
int x= 5;
int y= x++; // 'x' é usado em 'y' antes de ser incrementado // Agora, x= 6 e y= 5
Instruções a seguir:
#include <iostream>
int main() {
int numero1, numero2;
PÚBLICA
std::cout << "O resto da divisão é: " << resultadoResto << std::endl;
return 0;
}
Instruções a seguir:
#include <iostream>
int main() {
double v1, v2;
return 0;
}
Instruções a seguir:
#include <iostream>
PÚBLICA
int main() {
int numero;
return 0;
}
PÚBLICA