Escolar Documentos
Profissional Documentos
Cultura Documentos
1 o Ano - 1 o Semestre
2023-2024
Capı́tulos do programa:
2. Hello, World!
3. Objetos, tipos e valores.
Conteúdo dos slides adaptado do livro: Programming principles and practice
using C++, Bjarne Stroustrup, 2a edição, capı́tulo 3.
3.2. Variáveis.
3.7. Nomes.
▶ Um objeto pode ser visto como uma caixa em que se guardam valores do
tipo do objeto (exemplo: tipo inteiro, valor 42):
▶ Uma vez inserida a string na variável first name, esta pode ser utilizada:
Hello, Diogo!
▶ Apesar de ser uma má opção, a instrução cout acima também pode ser
escrita da seguinte forma:
▶ O texto que deverá aparecer no ecrã de forma literal é escrito entre aspas,
o que não acontece com o nome da variável first name.
39 // int: um inteiro
3.5 // double: numero com parte decimal
’.’ // char: carácter individual delimitado por plicas ’ ’
"Annemarie" // string: sequencia de caracteres delimitados por " "
true // bool: true ou false
▶ Isto acontece uma vez que por convenção as variáveis do tipo string
terminam com um dos caracteres: espaço, nova linha (Enter) ou tab.
▶ Por outro lado, Carlos não é um inteiro e por isso não será lido.
▶ Assim sendo, é preferı́vel inicializar a variável age para que tenha um valor
previsı́vel se a entrada de dados falhar.
▶ Uma string lida com >> é terminada por defeito por um espaço, ou seja,
é lida apenas uma palavra.
▶ Por vezes queremos ler mais do que uma palavra para a mesma string e
existem várias formas de fazer isto.
Programação Aplicada: C++ Atlântica, Instituto Universitário
3.3 Input e tipo de variável.
▶ Por exemplo, um nome composto por duas palavras pode ser armazenado
em duas variáveis do tipo string:
#include<iostream>
using namespace std;
// ler 2 nomes
int main()
{
cout << "Insira o seu primeiro e segundo nomes\n";
string first;
string second;
cin >> first >> second; // ler duas strings
cout << "Bom dia, " << first <<" "<< second << "\n";
}
▶ Neste caso, para escrever o nome completo para o ecrã, será necessário
inserir um espaço entre as duas strings.
Programação Aplicada: C++ Atlântica, Instituto Universitário
3.3 Input e tipo de variável.
▶ Use uma variável do tipo double para a idade de modo a permitir valores
não-inteiros, como 5.5 anos.
int count;
cin >> count; // >> armazena um inteiro em count
string name;
cin >> name; // >> armazena uma string em name
▶ O compilador sabe quais são as operações que são permitidas para cada
variável e desta forma pode prevenir muitos erros.
▶ Por exemplo, poderá ser óbvio que uma idade não pode ser negativa, mas
o computador não sabe isso.
▶ Nos exemplos do slide anterior são mostradas duas operações que usam a
mesma notação = em C++, que são semelhantes mas logicamente
distintas:
#include<iostream>
using namespace std;
int main()
{
string previous = " "; // palavra anterior, variavel inicializada.
string current; // palavra atual
while (cin>>current) { // ler sequencia de palavras
if (previous == current) // verificar: atual == anterior
cout << "palavra repetida: " << current << ’\n’;
previous = current;
}
}
string current;
while (cin>>current)
▶ Para que a última palavra que foi inserida fique disponı́vel para ser
comparada com a seguinte é necessário:
previous = current;
▶ Desta forma são tratados todos os casos exceto a primeira palavra que é
inserida, uma vez que não há uma palavra anterior para comparação.
▶ Esta situação é resolvida pela inicialização com um espaço da variável
previous na sua definição, uma vez que o operador >> não lê espaços.
▶ Por exemplo, para somar, subtrair ou multiplicar uma variável por uma
constante:
a += 7 <=> a = a+7
b -= 9 <=> b = b-9
c *= 2 <=> c = c*2
#include<iostream>
using namespace std;
int main()
{
int number_of_words = 0;
string previous = " "; // inicializar variavel
string current;
while (cin>>current) {
++number_of_words; // incrementar contador de palavras
if (previous == current)
cout << "palavra numero: " << number_of_words
<< " repetida: " << current << ’\n’;
previous = current;
}
}
Programação Aplicada: C++ Atlântica, Instituto Universitário
3.6 Operadores compostos de atribuição.
Exemplo: deteção de palavras repetidas
▶ O contador é inicializado a 0, e de cada vez que é inserida uma nova
palavra, o contador é incrementado:
++number_of_words;
▶ Desta forma, a primeira palavra é a nº1, a segunda palavra é a nº2, e
assim sucessivamente.
ou
number_of_words = number_of_words+1;
#include<iostream>
using namespace std;
int Main()
{
STRING s = "Adeus, mundo cruel! ";
cOut << S << ’\n’;
}
mtbf
TLA
myw
NBV
▶ Os nomes também não devem ser demasiado longos, uma vez que são
difı́ceis de escrever, tornam as linhas demasiado longas e são difı́ceis de
ler rapidamente.
partial_sum
element_count
stable_partition
the_number_of_elements
remaining_free_slots_in_symbol_table
▶ Graficamente:
▶ Exemplo: A sequência de bits da figura pode ser lida como um int (120)
ou como um char (’x’, considerando apenas os últimos 8).
Conversões seguras
▶ A conversão de tipo mais útil é de int para double uma vez que permite
misturar ints e doubles na mesma expressão.
double d1 = 2.3;
double d2 = d1+2; // 2 convertido para 2.0 antes da soma
if (d1 < 0) // 0 convertido para 0.0 antes da comparacao
cout << "d1 negativo";
#include<iostream>
using namespace std;
int main()
{
int a = 20000;
char c = a; // tentativa de colocar um grande int num pequeno char
int b = c;
if (a != b) // != significa nao-igual
cout << "oops!: " << a << "!=" << b << ’\n’;
else
cout << "existem grandes caracteres!\n";
}
Conversões inseguras
▶ Estas conversões são redutoras, uma vez que colocam um valor num
objeto que poderá ser demasiado pequeno para o conter.
#include<iostream>
using namespace std;
int main()
{
double d = 0;
while (cin>>d) { // repetir os comandos abaixo
// enquanto forem inseridos numeros
int i = d; // tentativa de colocar um double num int
char c = i; // tentativa de colocar um int num char
int i2 = c; // obter o valor inteiro de um caracter
cout << "d==" << d // o double original
<< " i=="<< i // convertido para int
<< " i2==" << i2 // valor int do char
<< " char(" << c << ")\n"; // o char
}
}
Programação Aplicada: C++ Atlântica, Instituto Universitário
3.9 Conversões entre tipos de dados (type safety ).
Conversões inseguras
Conversões inseguras
▶ Para além de mostrar como são feitos as conversões de para int e de int
para char no seu computador, este programa mostra mostra qual o
carácter (se algum) o seu computador produz em correspondência a um
determinado valor inteiro.
▶ Por exemplo:
int a = 1000;
char b = a; // b becomes -24 (on some machines)
▶ Nem todos os valores do tipo int têm valores equivalentes do tipo char, o
que varia entre implementações.
▶ int number;
cin >> number;
▶ int number;
cin >> number;
12. Quais são os tamanhos tı́picos dos objetos dos tipos char, int, e double?
12. Quais são os tamanhos tı́picos dos objetos dos tipos char, int, e double?
12. Quais são os tamanhos tı́picos dos objetos dos tipos char, int, e double?
12. Quais são os tamanhos tı́picos dos objetos dos tipos char, int, e double?
18. Dê cinco exemplos de nomes que são legais mas que não devem ser
usados, para não causar confusão.
18. Dê cinco exemplos de nomes que são legais mas que não devem ser
usados, para não causar confusão.
18. Dê cinco exemplos de nomes que são legais mas que não devem ser
usados, para não causar confusão.
▶ Nomes começados por underscore, que apesar de serem aceites pelo
compilador estão reservados para o sistema.
18. Dê cinco exemplos de nomes que são legais mas que não devem ser
usados, para não causar confusão.
▶ Nomes começados por underscore, que apesar de serem aceites pelo
compilador estão reservados para o sistema.
▶ Nomes que diferem entre si apenas por letras maiúsculas e
minúsculas.
18. Dê cinco exemplos de nomes que são legais mas que não devem ser
usados, para não causar confusão.
▶ Nomes começados por underscore, que apesar de serem aceites pelo
compilador estão reservados para o sistema.
▶ Nomes que diferem entre si apenas por letras maiúsculas e
minúsculas.
▶ Abreviaturas e acrónimos (siglas).
18. Dê cinco exemplos de nomes que são legais mas que não devem ser
usados, para não causar confusão.
▶ Nomes começados por underscore, que apesar de serem aceites pelo
compilador estão reservados para o sistema.
▶ Nomes que diferem entre si apenas por letras maiúsculas e
minúsculas.
▶ Abreviaturas e acrónimos (siglas).
▶ Nomes demasiado curtos ou demasiados longos.
Programação Aplicada: C++ Atlântica, Instituto Universitário
3.10 Questões de revisão.
19. O que é a segurança do tipo de dados (type safety) e por que é
importante?
20. A conversão de double para int pode não ser vantajosa. Porquê?
21. Defina uma regra para decidir se uma conversão entre tipos de dados é
segura ou não.
20. A conversão de double para int pode não ser vantajosa. Porquê?
21. Defina uma regra para decidir se uma conversão entre tipos de dados é
segura ou não.
20. A conversão de double para int pode não ser vantajosa. Porquê?
▶ A parte decimal dos valores do tipo double são truncados quando é
feita a conversão para int.
21. Defina uma regra para decidir se uma conversão entre tipos de dados é
segura ou não.
20. A conversão de double para int pode não ser vantajosa. Porquê?
▶ A parte decimal dos valores do tipo double são truncados quando é
feita a conversão para int.
21. Defina uma regra para decidir se uma conversão entre tipos de dados é
segura ou não.
▶ Uma conversão entre tipos de dados é segura se não é perdida
nenhuma informação, ou seja, podemos converter de novo para o
tipo de dados original e voltar ao valor original.
Programação Aplicada: C++ Atlântica, Instituto Universitário
3.11 Exercı́cios.
3. Escreva um programa que não calcule nada, mas que declare várias
variáveis com nomes legais e ilegais (como int double = 0;), para que
possa avaliar como o compilador reage.
11. Escreva um programa que peça ao utilizador para inserir um certo número
de moedas de diferentes valores (1 cêntimo, 2 cêntimos, 5 cêntimos, 10
cêntimos, 20 cêntimos, 50 cêntimos, 1 euro, 2 euros). O programa deverá
escrever algo como:
▶ Você tem 23 moedas de 1 cêntimo.
▶ Você tem 17 moedas de 20 cêntimos.
▶ O valor de total das suas moedas é de 1.25= C.
Escreva os resultados de forma correta: euro ou euros consoante o caso.
Programação Aplicada: C++ Atlântica, Instituto Universitário