Programação de Computadores
José Romildo Malaquias
DECOM
UFOP
2011.1
José Romildo Malaquias (DECOM UFOP)
Programação de Computadores
2011.1
1 / 55
A Linguagem C++
C++ é uma linguagem de programação de propósito geral desenvolvida a partir
da linguagem C com a inclusão de construções para suporte à programação
orientada a objetos.
José Romildo Malaquias (DECOM UFOP)
Programação de Computadores
2011.1
2 / 55
Tipos básicos: tipo lógico
Tipo: bool
Literais: true , false
Operações:
not negação
&&
e lógico
||
ou lógico
Conversões:
true
false
0
qualquer valor 6= 0
José Romildo Malaquias (DECOM UFOP)
1
0
false
true
Programação de Computadores
2011.1
3 / 55
Tipos básicos: tipo caractere
Tipo: char
Modificadores: signed , unsigned
Literais:
Letras: ’a’, ’b’, . . . , ’Z’
Algarismos: ’0’, ’1’, . . . , ’9’
Especiais: ’\n’, ’\t’, ’\0’
Números: 97 (o ’a’ na tabela ASCII)
Operações: entrada e saída
José Romildo Malaquias (DECOM UFOP)
Programação de Computadores
2011.1
4 / 55
Tipos básicos: tipo inteiro
Tipo: int
Modificadores:
signed , unsigned
short, long, long long
Literais:
Decimal: 20
Octal: 020
Hexadecimal: 0x20
Operações:
aritméticas: + - * / %
relacionais: == != < <= > >=
José Romildo Malaquias (DECOM UFOP)
Programação de Computadores
2011.1
5 / 55
Tipos básicos: tipos reais
Tipo: float, double
Modificadores: long, long long (aplicados ao double)
Literais:
1.23
.23
1.
1.23e10
1.23E-10
1.23f
Operações:
aritméticas: + - * /
relacionais: == != < <= > >=
José Romildo Malaquias (DECOM UFOP)
Programação de Computadores
2011.1
6 / 55
Tipos básicos: tipo vazio
Tipo: void
Uso:
Como tipo de retorno de uma função não retorna um valor como resultado
Como tipo de ponteiro para um tipo indefinido (ponteiro genérico)
José Romildo Malaquias (DECOM UFOP)
Programação de Computadores
2011.1
7 / 55
Variáveis
A memória do computador pode ser vista como um conjunto de caixinhas nas
quais podemos colocar valores.
Variável é uma caixinha na memória onde armazenamos um valor.
Declaração:
tipo nome;
tipo nome1 , . . ., nomen ;
tipo nome = expressão;
José Romildo Malaquias (DECOM UFOP)
Programação de Computadores
2011.1
8 / 55
Estrutura de seleção em algoritmos
Utilizada quando for necessário escolher uma entre várias alternativas.
Variações:
estrutura condicional if else
estrutura condicional if
estrutura condicional switch
José Romildo Malaquias (DECOM UFOP)
Programação de Computadores
2011.1
9 / 55
Estrutura de seleção condicional
A escolha da alternativa é definida por uma condição.
Uma condição é uma expressão booleana, e o seu valor pode ser verdadeiro
ou falso.
Portanto permite a escolha entre duas alternativas.
A condição é avaliada, podendo resultar em
verdadeiro: a primeira alternativa é escolhida e a segunda é ignorada
falso: a segunda alternativa é escolhida e a primeira é ignorada
if (condição)
comando1 ;
else
comando2 ;
José Romildo Malaquias (DECOM UFOP)
V
comando1
Programação de Computadores
condição
F
comando2
2011.1
10 / 55
Estrutura de seleção condicional: exemplo
Ler dois números inteiros e mostrar o maior deles
#include <iostream>
using namespace std;
int main()
{
}
José Romildo Malaquias (DECOM UFOP)
Programação de Computadores
2011.1
11 / 55
Estrutura de seleção condicional: exemplo
Ler dois números inteiros e mostrar o maior deles
#include <iostream>
using namespace std;
int main()
{
int x, y;
cout << "Digite dois numeros inteiros: ";
cin >> x >> y;
}
José Romildo Malaquias (DECOM UFOP)
Programação de Computadores
2011.1
11 / 55
Estrutura de seleção condicional: exemplo
Ler dois números inteiros e mostrar o maior deles
#include <iostream>
using namespace std;
int main()
{
int x, y;
cout << "Digite dois numeros inteiros: ";
cin >> x >> y;
if (x > y)
else
}
José Romildo Malaquias (DECOM UFOP)
Programação de Computadores
2011.1
11 / 55
Estrutura de seleção condicional: exemplo
Ler dois números inteiros e mostrar o maior deles
#include <iostream>
using namespace std;
int main()
{
int x, y;
cout << "Digite dois numeros inteiros: ";
cin >> x >> y;
if (x > y)
cout << "O maior numero e " << x << endl;
else
}
José Romildo Malaquias (DECOM UFOP)
Programação de Computadores
2011.1
11 / 55
Estrutura de seleção condicional: exemplo
Ler dois números inteiros e mostrar o maior deles
#include <iostream>
using namespace std;
int main()
{
int x, y;
cout << "Digite dois numeros inteiros: ";
cin >> x >> y;
if (x > y)
cout << "O maior numero e " << x << endl;
else
cout << "O maior numero e " << y << endl;
}
José Romildo Malaquias (DECOM UFOP)
Programação de Computadores
2011.1
11 / 55
Estrutura de seleção condicional com uma única alternativa
O comando é executado somente se a condição for satisfeita.
V
condição
if (condição)
comando;
F
comando
José Romildo Malaquias (DECOM UFOP)
Programação de Computadores
2011.1
12 / 55
Estrutura de seleção condicional com uma única alternativa:
exemplo
Ler um número não negativo e exibir a sua raiz quadrada.
#include <iostream>
#include <math>
using namespace std;
int main()
{
}
José Romildo Malaquias (DECOM UFOP)
Programação de Computadores
2011.1
13 / 55
Estrutura de seleção condicional com uma única alternativa:
exemplo
Ler um número não negativo e exibir a sua raiz quadrada.
#include <iostream>
#include <math>
using namespace std;
int main()
{
double x;
cout << "Digite um numero nao negativo: ";
cin >> x;
cout << "Fim" << endl;
}
José Romildo Malaquias (DECOM UFOP)
Programação de Computadores
2011.1
13 / 55
Estrutura de seleção condicional com uma única alternativa:
exemplo
Ler um número não negativo e exibir a sua raiz quadrada.
#include <iostream>
#include <math>
using namespace std;
int main()
{
double x;
cout << "Digite um numero nao negativo: ";
cin >> x;
if (x >= 0)
cout << "Fim" << endl;
}
José Romildo Malaquias (DECOM UFOP)
Programação de Computadores
2011.1
13 / 55
Estrutura de seleção condicional com uma única alternativa:
exemplo
Ler um número não negativo e exibir a sua raiz quadrada.
#include <iostream>
#include <math>
using namespace std;
int main()
{
double x;
cout << "Digite um numero nao negativo: ";
cin >> x;
if (x >= 0)
cout << "raiz quadrada: " << sqrt(x) << endl;
cout << "Fim" << endl;
}
José Romildo Malaquias (DECOM UFOP)
Programação de Computadores
2011.1
13 / 55
Estrutura de seleção múltipla: switch I
Permite a escolha de uma entre várias alternativas.
A seleção é feita através de uma expressão de controle.
Cada alternativa é uma lista de comandos rotulada com uma constante
(literal).
A expressão de seleção e as constantes devem ser de um mesmo tipo integral
(char, int, short int, long int, etc.)
float, double e string não são permitidos.
A lista de comandos de uma alternativa só termina com o comando break ou
no final do switch.
Execução do switch
1
Avalia-se a expressão de controle.
2
Seleciona-se a primeira alternativa cujo rótulo é igual ao valor da expressão
de controle, e executa-se a lista de comandos correspondente.
José Romildo Malaquias (DECOM UFOP)
Programação de Computadores
2011.1
14 / 55
Estrutura de seleção múltipla: switch II
switch (expressão)
{
case constante1 :
comandos1 ;
break;
case constante2 :
comandos2 ;
break;
...
case constanten :
comandosn ;
break;
default :
comando0 ;
}
temp ← expressão
temp = constante1
V
comandos1
V
comandos2
V
comandosn
F
temp = constante2
F
temp = constanten
F
comandos0
José Romildo Malaquias (DECOM UFOP)
Programação de Computadores
2011.1
15 / 55
Estrutura de seleção múltipla: switch III
O switch executa todos os comandos a partir da alternativa escolhida até o
final do switch ou até encontrar o comando break.
É necessário usar o comando break no final de cada alternativa (exceto a
última) para evitar que os comandos das alternativas seguintes sejam
executados.
As alternativas são mutuamente exclusivas somente quando cada caso
termina com o comando break.
Quando o valor da expressão não coincidir com aqueles especificados nas
alternativas e houver a alternativa rotulada com default então esta
alternativa será escolhida.
José Romildo Malaquias (DECOM UFOP)
Programação de Computadores
2011.1
16 / 55
Estrutura de seleção múltipla: exemplo
Análise do conceito obtido pelo aluno na disciplina
#include <iostream>
using namespace std;
int main()
{
}
José Romildo Malaquias (DECOM UFOP)
Programação de Computadores
2011.1
17 / 55
Estrutura de seleção múltipla: exemplo
Análise do conceito obtido pelo aluno na disciplina
#include <iostream>
using namespace std;
int main()
{
char conceito;
cout << "Digite o conceito obtido (A−F): ";
cin >> conceito;
}
José Romildo Malaquias (DECOM UFOP)
Programação de Computadores
2011.1
17 / 55
Estrutura de seleção múltipla: exemplo
Análise do conceito obtido pelo aluno na disciplina
#include <iostream>
using namespace std;
int main()
{
char conceito;
cout << "Digite o conceito obtido (A−F): ";
cin >> conceito;
switch (conceito)
{
}
}
José Romildo Malaquias (DECOM UFOP)
Programação de Computadores
2011.1
17 / 55
Estrutura de seleção múltipla: exemplo
Análise do conceito obtido pelo aluno na disciplina
#include <iostream>
using namespace std;
int main()
{
char conceito;
cout << "Digite o conceito obtido (A−F): ";
cin >> conceito;
switch (conceito)
{
case ’A’: cout << "Excelente"
; break;
}
}
José Romildo Malaquias (DECOM UFOP)
Programação de Computadores
2011.1
17 / 55
Estrutura de seleção múltipla: exemplo
Análise do conceito obtido pelo aluno na disciplina
#include <iostream>
using namespace std;
int main()
{
char conceito;
cout << "Digite o conceito obtido (A−F): ";
cin >> conceito;
switch (conceito)
{
case ’A’: cout << "Excelente"
; break;
case ’B’: cout << "Otimo"
; break;
}
}
José Romildo Malaquias (DECOM UFOP)
Programação de Computadores
2011.1
17 / 55
Estrutura de seleção múltipla: exemplo
Análise do conceito obtido pelo aluno na disciplina
#include <iostream>
using namespace std;
int main()
{
char conceito;
cout << "Digite o conceito obtido (A−F): ";
cin >> conceito;
switch (conceito)
{
case ’A’: cout << "Excelente"
; break;
case ’B’: cout << "Otimo"
; break;
case ’C’: cout << "Bom"
; break;
}
}
José Romildo Malaquias (DECOM UFOP)
Programação de Computadores
2011.1
17 / 55
Estrutura de seleção múltipla: exemplo
Análise do conceito obtido pelo aluno na disciplina
#include <iostream>
using namespace std;
int main()
{
char conceito;
cout << "Digite o conceito obtido (A−F): ";
cin >> conceito;
switch (conceito)
{
case ’A’: cout << "Excelente"
; break;
case ’B’: cout << "Otimo"
; break;
case ’C’: cout << "Bom"
; break;
case ’D’: cout << "Regular"
; break;
}
}
José Romildo Malaquias (DECOM UFOP)
Programação de Computadores
2011.1
17 / 55
Estrutura de seleção múltipla: exemplo
Análise do conceito obtido pelo aluno na disciplina
#include <iostream>
using namespace std;
int main()
{
char conceito;
cout << "Digite o conceito obtido (A−F): ";
cin >> conceito;
switch (conceito)
{
case ’A’: cout << "Excelente"
; break;
case ’B’: cout << "Otimo"
; break;
case ’C’: cout << "Bom"
; break;
case ’D’: cout << "Regular"
; break;
case ’E’: cout << "Ruim"
; break;
}
}
José Romildo Malaquias (DECOM UFOP)
Programação de Computadores
2011.1
17 / 55
Estrutura de seleção múltipla: exemplo
Análise do conceito obtido pelo aluno na disciplina
#include <iostream>
using namespace std;
int main()
{
char conceito;
cout << "Digite o conceito obtido (A−F): ";
cin >> conceito;
switch (conceito)
{
case ’A’: cout << "Excelente"
; break;
case ’B’: cout << "Otimo"
; break;
case ’C’: cout << "Bom"
; break;
case ’D’: cout << "Regular"
; break;
case ’E’: cout << "Ruim"
; break;
case ’F’: cout << "Insuficiente"
; break;
}
}
José Romildo Malaquias (DECOM UFOP)
Programação de Computadores
2011.1
17 / 55
Estrutura de seleção múltipla: exemplo
Análise do conceito obtido pelo aluno na disciplina
#include <iostream>
using namespace std;
int main()
{
char conceito;
cout << "Digite o conceito obtido (A−F): ";
cin >> conceito;
switch (conceito)
{
case ’A’: cout << "Excelente"
; break;
case ’B’: cout << "Otimo"
; break;
case ’C’: cout << "Bom"
; break;
case ’D’: cout << "Regular"
; break;
case ’E’: cout << "Ruim"
; break;
case ’F’: cout << "Insuficiente"
; break;
default : cout << "conceito invalido";
}
}
José Romildo Malaquias (DECOM UFOP)
Programação de Computadores
2011.1
17 / 55
Estrutura de seleção múltipla: exemplo
Análise do conceito obtido pelo aluno na disciplina
#include <iostream>
using namespace std;
int main()
{
char conceito;
cout << "Digite o conceito obtido (A−F): ";
cin >> conceito;
switch (conceito)
{
case ’A’: cout << "Excelente"
; break;
case ’B’: cout << "Otimo"
; break;
case ’C’: cout << "Bom"
; break;
case ’D’: cout << "Regular"
; break;
case ’E’: cout << "Ruim"
; break;
case ’F’: cout << "Insuficiente"
; break;
default : cout << "conceito invalido";
}
cout << endl;
}
José Romildo Malaquias (DECOM UFOP)
Programação de Computadores
2011.1
17 / 55
Estrutura de repetição em algoritmos
Utilizada quando um trecho do algoritmo ou até mesmo todo o algoritmo
precisa ser repetido.
O número de repetições pode ser fixo ou estar associado a uma condição.
Existem estruturas de controle para tais situações:
while
do while
for
José Romildo Malaquias (DECOM UFOP)
Programação de Computadores
2011.1
18 / 55
Número indefinido de repetições com teste no início
Não é necessário saber o número de vezes que o trecho do algoritmo deve ser
repetido.
Baseia-se na análise de uma condição (expressão booleana).
A repetição será feita enquanto a condição for verdadeira.
while (condição)
comando;
condição
V
comando
F
José Romildo Malaquias (DECOM UFOP)
Programação de Computadores
2011.1
19 / 55
Número indefinido de repetições com teste no início:
exemplo
Mostrar os números inteiros de 1 até 5
#include <iostream>
using namespace std;
int main()
{
}
José Romildo Malaquias (DECOM UFOP)
Programação de Computadores
2011.1
20 / 55
Número indefinido de repetições com teste no início:
exemplo
Mostrar os números inteiros de 1 até 5
#include <iostream>
using namespace std;
int main()
{
int contador = 1;
}
José Romildo Malaquias (DECOM UFOP)
Programação de Computadores
2011.1
20 / 55
Número indefinido de repetições com teste no início:
exemplo
Mostrar os números inteiros de 1 até 5
#include <iostream>
using namespace std;
int main()
{
int contador = 1;
while (contador <= 5)
{
}
}
José Romildo Malaquias (DECOM UFOP)
Programação de Computadores
2011.1
20 / 55
Número indefinido de repetições com teste no início:
exemplo
Mostrar os números inteiros de 1 até 5
#include <iostream>
using namespace std;
int main()
{
int contador = 1;
while (contador <= 5)
{
contador = contador + 1;
}
}
José Romildo Malaquias (DECOM UFOP)
Programação de Computadores
2011.1
20 / 55
Número indefinido de repetições com teste no início:
exemplo
Mostrar os números inteiros de 1 até 5
#include <iostream>
using namespace std;
int main()
{
int contador = 1;
while (contador <= 5)
{
cout << "Valor do contador: " << contador << endl;
contador = contador + 1;
}
}
José Romildo Malaquias (DECOM UFOP)
Programação de Computadores
2011.1
20 / 55
Número indefinido de repetições com teste no início
O comando while pode ser definido recursivamente como:
while (condição)
comando;
José Romildo Malaquias (DECOM UFOP)
if (condição)
{
comando;
while (condição)
comando;
}
Programação de Computadores
2011.1
21 / 55
Problemas I
1
Escreva um programa que leia um número inteiro, calcule e mostre o fatorial
deste número.
Definição recursiva de fatorial
n! =
1
n × (n − 1)!
, se n = 0
, se n > 0
Definição interativa de fatorial
n! = 1 × 2 × · · · × (n − 1) × n
Observe que será necessário realizar várias multiplicações para encontrar o
fatorial: repetir as multiplicações
Utilize uma variável auxiliar para contar de 1 até n.
Utilize uma variável para armazenar o resultado (o produto parcial).
Para cada valor do contador, efetuar uma multiplicação, atualizando o produto
parcial.
Ao final das repetições, o produto parcial será o fatorial desejado.
José Romildo Malaquias (DECOM UFOP)
Programação de Computadores
2011.1
22 / 55
Problemas II
2
Faça um programa que leia um valor n inteiro e positivo, calcule e mostre o
valor de E , dado pelo fórmula:
E =1+
José Romildo Malaquias (DECOM UFOP)
1
1
1
1
1
+
+
+
+ ··· +
1! 1! 2! 3!
n!
Programação de Computadores
2011.1
23 / 55
Problemas III
3
Faça um programa que leia as notas de seis alunos, calcule e mostre a média
aritmética das notas.
José Romildo Malaquias (DECOM UFOP)
Programação de Computadores
2011.1
24 / 55
Problemas IV
4
Faça um programa que leia as três notas de todos os alunos de uma turma,
calcule e mostre:
a) a média aritmética das três notas de cada aluno;
b) a situação do aluno, dada pela tabela
média aritmética
inferior a 3
entre 3 (inclusive) e 7
igual ou superior a 7
c)
d)
e)
f)
o
o
o
a
situação
reprovado
exame especial
aprovado
total de alunos aprovados;
total de alunos de exame especial;
total de alunos reprovados;
média da turma.
José Romildo Malaquias (DECOM UFOP)
Programação de Computadores
2011.1
25 / 55
Número indefinido de repetições com teste no final
Não é necessário saber o número de vezes que o trecho do algoritmo deve ser
repetido.
Baseia-se na análise de uma condição (expressão booleana).
Primeiro executa-se o trecho a ser repetido, para depois verificar a condiçao.
A repetição será feita enquanto a condição for verdadeira.
comando
do
comando;
while (condição);
condição
V
F
José Romildo Malaquias (DECOM UFOP)
Programação de Computadores
2011.1
26 / 55
Número indefinido de repetições com teste no final: exemplo
Ler números inteiros até o número zero ser digitado
#include <iostream>
using namespace std;
int main()
{
}
José Romildo Malaquias (DECOM UFOP)
Programação de Computadores
2011.1
27 / 55
Número indefinido de repetições com teste no final: exemplo
Ler números inteiros até o número zero ser digitado
#include <iostream>
using namespace std;
int main()
{
int numero;
cout << "Digite varios numeros inteiros (0 para terminar)" << endl;
cout << "Obrigado" << endl;
}
José Romildo Malaquias (DECOM UFOP)
Programação de Computadores
2011.1
27 / 55
Número indefinido de repetições com teste no final: exemplo
Ler números inteiros até o número zero ser digitado
#include <iostream>
using namespace std;
int main()
{
int numero;
cout << "Digite varios numeros inteiros (0 para terminar)" << endl;
do
{
}
while (
);
cout << "Obrigado" << endl;
}
José Romildo Malaquias (DECOM UFOP)
Programação de Computadores
2011.1
27 / 55
Número indefinido de repetições com teste no final: exemplo
Ler números inteiros até o número zero ser digitado
#include <iostream>
using namespace std;
int main()
{
int numero;
cout << "Digite varios numeros inteiros (0 para terminar)" << endl;
do
{
cin >> numero;
}
while (numero != 0);
cout << "Obrigado" << endl;
}
José Romildo Malaquias (DECOM UFOP)
Programação de Computadores
2011.1
27 / 55
Número indefinido de repetições com teste no final: exemplo
Ler números inteiros até o número zero ser digitado
#include <iostream>
using namespace std;
int main()
{
int numero;
int quantidade = 0;
cout << "Digite varios numeros inteiros (0 para terminar)" << endl;
do
{
cin >> numero;
if (numero != 0)
quantidade += 1;
}
while (numero != 0);
cout << "Voce digitou " << quantidade << " numeros" << endl;
cout << "Obrigado" << endl;
}
José Romildo Malaquias (DECOM UFOP)
Programação de Computadores
2011.1
27 / 55
Número indefinido de repetições com teste no início
O comando do while pode ser definido recursivamente como:
do
comando;
while (condição);
José Romildo Malaquias (DECOM UFOP)
comando;
if (condição)
do
comando;
while (condição);
Programação de Computadores
2011.1
28 / 55
Número definido de repetições
Sabe-se o número de vezes que um trecho do programa deve ser repetido.
for (inicialiazação; condição; incremento)
comando;
1
O comando inicialização é executado
uma única vez, no início do comando de
repetição.
2
A expressão booleana condição é
avaliada para decidir se continua
repetindo:
falso termina o comando de repetição
verdadeiro repetir:
a) executa o comando no corpo da
estrutura de repetição
b) executa o comando incremento a
fim de alterar o estado da
computação, preparando para a
próxima repetição
c) volta na avaliação da condição em 2
e repete o processo.
José Romildo Malaquias (DECOM UFOP)
inicialização
condição
Programação de Computadores
V
comando
incremento
F
2011.1
29 / 55
Número definido de repetições: exemplo
Calcular o fatorial de um número natural.
#include <iostream>
using namespace std;
int main()
{
}
José Romildo Malaquias (DECOM UFOP)
Programação de Computadores
2011.1
30 / 55
Número definido de repetições: exemplo
Calcular o fatorial de um número natural.
#include <iostream>
using namespace std;
int main()
{
cout << "Digite um numero natural: ";
int n;
cin >> n;
}
José Romildo Malaquias (DECOM UFOP)
Programação de Computadores
2011.1
30 / 55
Número definido de repetições: exemplo
Calcular o fatorial de um número natural.
#include <iostream>
using namespace std;
int main()
{
cout << "Digite um numero natural: ";
int n;
cin >> n;
int i;
int fat = 1;
}
José Romildo Malaquias (DECOM UFOP)
Programação de Computadores
2011.1
30 / 55
Número definido de repetições: exemplo
Calcular o fatorial de um número natural.
#include <iostream>
using namespace std;
int main()
{
cout << "Digite um numero natural: ";
int n;
cin >> n;
int i;
int fat = 1;
for (i = 1; i <= n; i++)
}
José Romildo Malaquias (DECOM UFOP)
Programação de Computadores
2011.1
30 / 55
Número definido de repetições: exemplo
Calcular o fatorial de um número natural.
#include <iostream>
using namespace std;
int main()
{
cout << "Digite um numero natural: ";
int n;
cin >> n;
int i;
int fat = 1;
for (i = 1; i <= n; i++)
fat = fat * i;
}
José Romildo Malaquias (DECOM UFOP)
Programação de Computadores
2011.1
30 / 55
Número definido de repetições: exemplo
Calcular o fatorial de um número natural.
#include <iostream>
using namespace std;
int main()
{
cout << "Digite um numero natural: ";
int n;
cin >> n;
int i;
int fat = 1;
for (i = 1; i <= n; i++)
fat = fat * i;
cout << n << "! = " << fat;
}
José Romildo Malaquias (DECOM UFOP)
Programação de Computadores
2011.1
30 / 55
Estruturas de Dados
Valores simples: indivisíveis
números inteiros: 12, 324, -1324
números fracionários: 0.212, -132.412, 78.13e-17
caracteres: ’B’, ’@’, ’n’
booleanos: true , false
Valores compostos: formados por partes:
registro de um livro na biblioteca:
título
autor
editora
ano publicação
notas dos alunos em uma prova:
nota do primeiro aluno
nota do segundo aluno
..
.
nota do último aluno
José Romildo Malaquias (DECOM UFOP)
Programação de Computadores
2011.1
31 / 55
Estruturas de Dados
Valores compostos são estruturas de dados.
Estruturas homogêneas: todos os componentes são do mesmo tipo.
vetores
Estruturas heterogêneas: os componentes podem ser de diferents tipos.
registros (structs)
uniões
José Romildo Malaquias (DECOM UFOP)
Programação de Computadores
2011.1
32 / 55
Vetores
Vetor
Estrutura formada por uma sequência de variáveis do mesmo tipo.
Identificadas por um único nome.
Cada componente é identificado por um índice, um número inteiro que
referencia sua localização dentro da estrutura.
Em C++ os índices utilizados para identificar as posições em um vetor
começam sempre em 0 (zero) e vão até o tamanho do vetor menos uma
unidade.
José Romildo Malaquias (DECOM UFOP)
Programação de Computadores
2011.1
33 / 55
Vetores
Declaração
Na declaração de uma variável vetor especificamos:
o tipo dos componentes do vetor
o nome da variável
o número de componentes que formam o vetor
os elementos do vetor (opcional)
tipo nome[tamanho];
tipo nome[n] = { e0 , e1 , . . ., en−1 };
tipo nome[] = { e0 , e1 , . . ., en−1 };
Exemplos:
int notas[10];
bool resultados[2*n+3];
double alfa[3] = { 1.2, -0.45, 5.5 };
string mensagens[] = { "comeco", "meio", "fim", "end" };
José Romildo Malaquias (DECOM UFOP)
Programação de Computadores
2011.1
34 / 55
Vetores
Indexação
Operação básica com vetor: indexação
Permite selecionar um componente específico da estrutura pela sua posição
(índice)
O índice do primeiro elemento é 0 (zero)
O índice do último elemento é o tamanho do vetor menos um
vetor[índice]
José Romildo Malaquias (DECOM UFOP)
Programação de Computadores
2011.1
35 / 55
Vetores
Exemplo: exibe um elemento do vetor
string mensagens[] = { "comeco", "meio", "fim", "end" };
cout << mensagens[2] << endl;
José Romildo Malaquias (DECOM UFOP)
Programação de Computadores
2011.1
36 / 55
Vetores
Exemplo: modifica um elemento do vetor
int vet[] = { 10, 20, 30 };
vet[2] = 2*vet[0] + vet[1] - vet[2];
cout << vet[2] << endl;
José Romildo Malaquias (DECOM UFOP)
Programação de Computadores
2011.1
37 / 55
Vetores
Exemplo: exibe todos os elementos do vetor
int vet[] = { 10, 20, 30 };
for (int i = 0; i < 3; i++)
cout << vet[i] << ’ ’;
cout << endl;
José Romildo Malaquias (DECOM UFOP)
Programação de Computadores
2011.1
38 / 55
Vetores
Exemplo: preenchendo um vetor
cout << "Quantidade de alunos: ";
int tamanho;
cin >> tamanho;
double vet[tamanho];
for (int i = 0; i < tamanho; i++)
{
cout << "nota " << i << ": ";
cin >> vet[i];
}
José Romildo Malaquias (DECOM UFOP)
Programação de Computadores
2011.1
39 / 55
Vetores
Exemplo: média dos elementos do vetor
const int n = 5;
double notas[n] = { 1.1, 2.2, 3.3, 4.4, 5.5 };
double soma = 0.0;
for (int i = 0; i < n; i++)
soma += notas[i]
double media = soma / n;
José Romildo Malaquias (DECOM UFOP)
Programação de Computadores
2011.1
40 / 55
Vetores: Problemas I
Problema
Faça um programa que leia as notas dos alunos de uma turma, determine e mostre
a média das notas, e o número de alunos com notas superiores ou iguais à média.
José Romildo Malaquias (DECOM UFOP)
Programação de Computadores
2011.1
41 / 55
Vetores: Problemas II
Problema
Faça um programa que simule o lançamento de um dado com vinte jogadas.
Mostrar os números sorteados e a frequência com que apareceram.
Para gerar números aleatórios em C++, temos duas funções que trabalham de
forma semelhante:
rand
random
Estas duas funções geram números aleatórios de 0 a RAND_MAX (definido na
biblioteca stdlib.h). Se você quiser gerar valores randômicos em uma
determinada faixa numérica, basta fazer assim:
numero = rand() % valor_maximo;
ou
numero =random() % valor_maximo;
Para usá-las, porém, é necessário inicializar o gerador de números aleatórios com a
função srand.
José Romildo Malaquias (DECOM UFOP)
Programação de Computadores
2011.1
42 / 55
Vetores: Problemas III
Problema
Uma pequena loja de artesanato possui um vendedor e comercializa dez tipos de
objetos. O vendedor recebe, mensalmente, salário de R$ 400,00, acrescido de 5%
do valor total de suas vendas. O valor unitário dos objetos deve ser informado e
armazenado em um vetor; a quantidade vendida de cada peça deve ficar em outro
vetor, mas na mesma posição. Crie um programa que receba os preços e as
quantidades vendidadas, armazenando-os em seus respectivos vetores (ambos com
tamanho dez). Depois, determine e mostre:
um relatório contendo quantidade vendida, valor unitário e valor total de
cada objeto; ao final, deverá ser mostrado o valor geral das vendas e o valor
da comissão que será paga ao vendedor;
o valor do objeto mais vendido e sua posição no vetor (não se preocupe com
empates).
José Romildo Malaquias (DECOM UFOP)
Programação de Computadores
2011.1
43 / 55
Vetores: Problemas IV
Problema
Faça um programa que preencha um vetor com os modelos de cinco carros
(exemplos de modelos: fusca, gol, vectra, etc.), carregue outro vetor com o
consumo desses carros, isto é, quantos quilômetros cada um deles faz com um
litro de combustível, calcule e mostre:
o modelo de carro mais econômico,
quantos litros de combustível cada um dos carros cadastrados consome para
percorrer uma distância de de mil quilômetros.
José Romildo Malaquias (DECOM UFOP)
Programação de Computadores
2011.1
44 / 55
Matrizes
matriz: variável composta homogênea multidimensional.
Formada por uma sequência de variáveis, todas do mesmo tipo, com o
mesmo nome, e alocadas sequencialmente na memória.
Os componentes são identificados por um conjunto de índices.
Utiliza-se um índice para cada dimensão.
José Romildo Malaquias (DECOM UFOP)
Programação de Computadores
2011.1
45 / 55
Matrizes
Declaração
Na declaração de uma variável matriz especificamos:
o tipo dos componentes da matriz
o nome da variável
o número de componentes que formam cada dimensão da matriz
os elementos do vetor (opcional)
tipo nome[dimensão1 ][dimensão2 ]...[dimensãoN ];
Exemplos:
int notas[2][6];
float y[2][4][3];
char mat [4][3] [= {
{
{
{
};
{ ’A’, ’E’, ’I’ },
’6’, ’5’, ’4’ },
’#’, ’@’, ’=’ },
’m’, ’n’, ’z’ }
José Romildo Malaquias (DECOM UFOP)
Programação de Computadores
2011.1
46 / 55
Matrizes
Indexação
Permite selecionar um componente específico da estrutura pela sua posição,
dada por um conjunto de índices.
Exemplos:
int mat[2][4] = { { 10, 20, 30, 40}, {9, 8, 7, 6} };
// acessar um elemento da matriz
cout << "segunda linha, terceira coluna −−> " << mat[1][2];
// atribuir um valor a um elemento da matriz
mat[1][2] = 2*mat[0][0] + 1;
cout << "segunda linha, terceira coluna −−> " << mat[1][2];
José Romildo Malaquias (DECOM UFOP)
Programação de Computadores
2011.1
47 / 55
Matrizes
Problema 1
Obter do usuário uma matriz m3x2 , calcular e mostrar a matriz r3x2 resultante da
multiplicação de todos os elementos de m pelo seu maior elemento.
Problema 2
Faça um programa que preencha uma matriz 10x3 com as notas de dez alunos em
três provas. O programa deverá mostrar um relatório com o número dos alunos
(número da linha) e a prova em que cada aluno obteve menor nota. Ao final do
relatório, deverá mostrar quantos alunos tiveram menor nota em cada uma das
provas: na prova 1, na prova 2 e na prova 3.
José Romildo Malaquias (DECOM UFOP)
Programação de Computadores
2011.1
48 / 55
Registros
Registros são estruturas de dados capazes de agregar várias informações.
Os componentes de um registro são chamados de campos.
Os campos podem ser de tipos diferentes.
Por isto registros são estruturas de dados heterogêneas.
Os tipos registro são novos tipos de dados definidos pelo programador, de
acordo com a sua necessidade.
Em C++ os registros são chamados de struct.
José Romildo Malaquias (DECOM UFOP)
Programação de Computadores
2011.1
49 / 55
Registros: Uso
Utiliza-se a palavra reservada struct para declarar um novo tipo registro.
A seleção de um componente é feita pelo operador . (ponto).
José Romildo Malaquias (DECOM UFOP)
Programação de Computadores
2011.1
50 / 55
Registros: Exemplo de uso
// declaracao de um tipo registro
struct conta_bancaria
{
int numero;
string titular;
double saldo;
};
// declaracao de variaveis de tipo registro
struct conta_bancaria conta1;
struct conta_bancaria conta2 = { 10231, "Ivo Mascarenhas", 125.45 };
struct conta_bancaria todas_as_contas[10];
// acesso aos componentes de um registro
cout << "Titular: " << conta2.titular << endl;
conta2.saldo = conta2.saldo - 0.20 * conta2.saldo;
José Romildo Malaquias (DECOM UFOP)
Programação de Computadores
2011.1
51 / 55
Registros: Problema 1
Problema 1
Faça um programa que realize o cadastro de contas bancárias com as seguintes
informações: número da conta, nome do cliente, e saldo. O banco permitirá o
cadastramento de apenas 15 contas e não poderá haver mais que uma conta com
o mesmo número. Crie o menu de opções a seguir e implemente cada uma das
opções.
Menu
1
2
3
0
-
Cadastrar nova conta
Visualizar todas as contas de determinado cliente
Excluir a conta com menor saldo
Terminar
Escolha uma opcao:
José Romildo Malaquias (DECOM UFOP)
Programação de Computadores
2011.1
52 / 55
Registros: Problema 2
Problema 2
Crie um programa para ler o código, o sexo (M – masculino; F – feminino) e o
número de horas/aula ministradas pelos professores de uma escola durante um
mês. Sabe-se que um professor ganha R$40,50 por hora-aula. Após a leitura, o
programa deverá mostrar:
uma listagem contendo o código, o salário bruto, o desconto calculado de
acordo com a tabela 1, e o salário líquido de todos os professores;
a média aritmética dos salários brutos dos professores do sexo masculino;
a média aritmética dos salários brutos dos professores do sexo feminino.
sexo
masculino
feminino
até 70 horas/aula ao mês
10%
7%
mais que 70 horas/aula ao mês
8%
5%
Tabela: Descontos salariais
José Romildo Malaquias (DECOM UFOP)
Programação de Computadores
2011.1
53 / 55
Funções: Problemas
1
Elabore um programa contendo uma sub-rotina (função) que receba as três
notas de um aluno como parâmetros e uma letra. Se a letra for A, a
sub-rotina deverá calcular a média aritmética das notas do aluno; se for P,
deverá calcular a média ponderada, com pesos 5, 3 e 2. A média calculada
deverá ser devolvida ao principal para, então, ser mostrada.
2
Faça um programa com uma função que receba como parâmetro a hora de
início de a hora de término de um jogo, ambas subdivididas em dois valores
distintos: horas e minutos. A função deverá retornar a duração expressa em
minutos, considerando que o tempo máximo de duração de um jogo é de 24
horas e que ele pode começar em um dia e terminar no outro.
José Romildo Malaquias (DECOM UFOP)
Programação de Computadores
2011.1
54 / 55
FIM
José Romildo Malaquias (DECOM UFOP)
Programação de Computadores
2011.1
55 / 55
Download

Programação de Computadores