Você está na página 1de 8

Prof. Dr.

Fbio Roberto Chavarette


fabioch@mat.feis.unesp.br

Lista de Exerccio 7
1. Escreva uma funo que aceite uma matriz celular de cadeia de caracteres e
classifique em ordem ascendente de acordo com a ordem lexicogrfica do conjunto
de caracteres ASCII (Voc pode utilizar a funo c_strcmp para comparao se
quiser).
2. Escreva uma funo que aceite uma matriz celular de cadeia de caracteres e
classifique em ordem ascendente de acordo com a ordem alfanumrica (isso
implica que voc deve tratar A e a como a mesma letra).
3. Crie uma matriz esparsa 100 x 100 a qual cerca de 5% dos elementos
contenham valores aleatrios distribudos normalmente, e todos os outros
elementos sejam zero (use a funo sprandn para gerar esses valores). A seguir,
estabelea que todos os elementos da diagonal da matriz sejam 1. Em seguida,
defina uma matriz de coluna esparsa com 100 elementos b, e inicie essa matriz
com 100 valores distribudos uniformemente, produzidos pela funo rand.
Responda s seguintes questes sobre essas matrizes:
a. Crie uma matriz completa a_full a partir da matriz esparsa a. Compare a memria
necessria para armazenar a matriz completa e a matriz esparsa. Qual mais
eficiente?
b. Faa um diagrama da distribuio de valores na matriz a, usando a funo spy.
c. Crie uma matriz completa b_full a partir da matriz esparsa b. Compare a
memria necessria para armazenar a matriz completa e a matriz esparsa. Qual
mais eficiente?
d. Resolva o sistema de equaes a*x=b para x usando ambas as matrizes, completa
e esparsa. Como os dois conjuntos de respostas se comparam? Mea o tempo para
as duas solues. Qual a mais rpida ?
4. Crie uma funo que aceite qualquer nmero de argumentos numricos de
entrada e faa a soma de todos os elementos individuais em todos os argumentos.
Teste sua funo passando por ela os quatro argumentos a= 10,
1 0 3

c 5 1 2
1 2 0

4

b 2
2

e d=[1 5 -2].

5. Modifique a funo do exerccio anterior de modo que ela possa aceitar matrizes
numricas comuns ou matrizes celulares com valores numricos. Teste sua funo
Departamento de Matemtica.

Prof. Dr. Fbio Roberto Chavarette


fabioch@mat.feis.unesp.br

passando para ela os dois argumentos a e b, onde


1 2
b2

2 1

1 4
a

2 3

, b{1}=[1 5 2] e

6. Crie uma matriz estrutura que contenha todas as informaes necessrias para
construir um diagrama de um conjunto de dados. No mnimo, a matriz estrutura
deve conter os seguintes campos:
x_data
y_data
type
plot_title
x_label
y_label
x_range
y_range

x-data (um ou mais conjuntos de dados em clulas separadas)


y-data (um ou mais conjuntos de dados em clulas separadas)
linear, semilogx e assim por diante.
ttulo do diagrama
rtulo do eixo x.
rtulo do eixo y.
faixa de x a colocar no diagrama
faixa de y a colocar no diagrama

Voc pode acrescentar campos adicionais que aumentem seu controle sobre o
diagrama final.
Depois de criar essa matriz estrutura, crie uma funo que aceite uma
matriz dessa estrutura e produza um diagrama para cada estrutura da matriz. A
funo deve aplicar caractersticas iniciais inteligentes se alguns campos de dados
estiverem faltando. Por exemplo, se o campo plot_title for uma matriz vazia, a
funo no deve colocar um ttulo no grfico. Pense cuidadosamente sobre as
caractersticas iniciais adequadas antes de comear a escrever a sua funo!
Para testar sua funo, crie uma matriz estrutura que contenha os dados
para trs diagramas de trs tipos diferentes e passe aquela matriz estrutura para a
sua funo. A funo deve construir corretamente diagramas para todos os
conjuntos de dados, em trs janelas diferentes de figuras.
7 Faa um programa que realize o cadastro de contas bancrias com as seguintes
informaes:
Numero da conta
Nome do cliente
Saldo
O banco permitir o cadastramento de apenas quinze contas e no poder haver
mais que uma conta com o mesmo nmero. Crie o menu de opes a seguir.
Menu de opes:
1. Cadastrar contas.
2. Visualizar todas as contas de determinado cliente.
3. Excluir a conta com o menor saldo (supondo a no- existncia de saldos
iguais).
4. Sair
Algoritmo Soluo:
Algoritmo
Declare conta[15] REGISTRO (num, saldo NUMERICO, nome LITERAL)
Departamento de Matemtica.

Prof. Dr. Fbio Roberto Chavarette


fabioch@mat.feis.unesp.br

i, op, posi, achou, num_conta, menor_saldo NUMERICO


nome_cliente LITERAL
PARA i=1 ate 15 FAA
INICIO
Conta[i].num = 0
Conta[i].nome =
Conta[i].saldo = 0
FIM
posi =1
REPITA
ESCREVA Menu de Opes
ESCREVA 1 Cadastrar Contas
ESCREVA 2 Visualizar todas as contas de determinado cliente
ESCREVA 3 Excluir conta com menor saldo
ESCREVA 4 Sair
ESCREVA Digite sua Opo
LEIA op
Se op < 1 OU op>4
ENTAO ESCREVA Opo Invalida
Se op = 1
ENTAO INICIO
Se posi > 15
ENTAO ESCREVA Todas as contas j foram cadastradas !
SENAO INICIO
Achou = 0
ESCREVA Digite o numero da conta a ser includa
LEIA num_conta
PARA i=1 ATE posi-1 FAA
INICIO
Se num_conta = conta[i].num
Ento achou = 1
FIM
Se achou = 1
Ento ESCREVA J existe conta cadastrada com esse numero
Seno INICIO
Conta[posi].num = num_conta
ESCREVA Digite o nome do cliente
LEIA conta[posi].nome
ESCREVA Digite o saldo do cliente
LEIA conta[posi].saldo
ESCREVA Conta cadastrada com sucesso
Posi = posi +1
FIM
FIM
FIM
Se op = 2
ENTAO inicio
ESCREVA Digite o nome do cliente a ser consultado
Departamento de Matemtica.

Prof. Dr. Fbio Roberto Chavarette


fabioch@mat.feis.unesp.br

LEIA nome_cliente
Achou = 0
PARA i=1 ATE posi-1 FAA
INICIO
Se conta[i].nome = nome_cliente
ENTAO INICIO
ESCREVA conta[i].num, conta[i].saldo
Achou = 1
FIM

FIM
Se achou = 0
ENTAO ESCREVA No existe conta cadastrada para este cliente
FIM
Se op=3
ENTAO INICIO
Se posi = 1
ENTAO ESCREVA Nenhuma conta foi cadastrada
SENAO INICIO
Menor_saldo = conta[i].saldo
Achou = 1
i=2
ENQUANTO i < posi FAA
INICIO
Se conta[i].saldo < menor_saldo
ENTAO INICIO
Menor_saldo = conta[i].saldo
Achou = 1
FIM
i=i+1
FIM
PARA i=achou ate posi-1 FAA
INICIO
Conta[i-1].num = conta[i].num
Conta[i-1].nome = conta[i].nome
Conta[i-1].saldo = conta[i].saldo
FIM
ESCREVA Conta excluda com sucesso
Posi = posi 1
FIM
FIM
ATE op = 4
FIM_ALGORITMO
8 Uma Auto-Escola possui um cadastro de alunos, no ordenado. Cada item do
cadastro possui as informaes definidas no registro abaixo. Fazer a definio do
registro, em C++ que encontre o aluno mais novo que pertence ou pertenceu a
escola e escreva seus dados: (Max. 50 alunos).

Departamento de Matemtica.

Prof. Dr. Fbio Roberto Chavarette


fabioch@mat.feis.unesp.br

Obs.: Idade deve ser real pois o aluno pode possuir 18.1 anos.(Supor que no
existam dois alunos com a mesma idade).
/*Algoritmo que l o cadastro de alunos de uma auto-escola, encontra o aluno mais
novo e escreve seus dados. */
incio
// Defnio de constantes
constante QTDE_MAX_ALUNOS=50, TAM_NOME=50;
// Definio de novos tipos
registro DATA // Definio do registro de uma data
incio
inteiro dia, mes, ano;
fim
registro fichaAlunoAutoEscola // Definio da Ficha de um aluno da
auto escola
incio
caracter nomeAluno[TAM_NOME+1],
endereco[TAM_ENDERECO+1];
DATA dataInsc, dataCarta;
real idade;
fim;
// Declarao de Variveis
fichaAlunoAutoEscola aluno[QTDE_MAX_ALUNOS];
inteiro contAluno; // Contador de quantidade de alunos informada
inteiro posicaoMenorIdade; // posicao do aluno com menor idade
inteiro qtdeAlunos; // Quantidade total de alunos informada
real idadeMenor; // Menor idade de todos os alunos
caracter temAluno; // Auxiliar no controle de entrada de dados de
aluno
// Desenvolvimento do algoritmo
contAluno = -1;
// Leitura dos dados de todos os Alunos
escreva ("Tem dados de aluno? (S/N):"); leia( temAluno );
enquanto((( temAluno == 'S') OU (temAluno == 's')) E (contAluno <
QTDE_MAX_ALUNOS))
innio
Departamento de Matemtica.

Prof. Dr. Fbio Roberto Chavarette


fabioch@mat.feis.unesp.br

escreva("Leitura dos dados do ", ++contAluno, " aluno:");


escreva("Digite o nome:"); leia(
aluno[contAluno].nomeAluno );
escreva("Digite endereco:"); leia(
aluno[contAluno].endereco );
escreva("Digite a idade:"); leia(aluno[contAluno].idade);
escreva("Digite a data de Inscrio:");
escreva("Dia :");leia( aluno[contAluno].dataInsc.dia );
escreva("Mes:"); leia( aluno[contAluno].dataInsc.mes );
escreva("Ano:"); leia(aluno[contAluno].dataInsc.ano);
escreva("Digite a data da carta:");
escreva("Dia :");leia( aluno[contAluno].dataCarta.dia );
escreva("Mes:"); leia( aluno[contAluno].dataCarta.mes );
escreva("Ano:"); leia(aluno[contAluno].dataCarta.ano);
escreva ("Tem mais dados de aluno? (S/N):"); leia(
temAluno );
fim
// Encontra a menor idade e a posio do aluno de menor idade
qtdeAlunos = contAluno+1;
posicaoIdadeMenor = 0; // supe que o primeiro aluno possui a
menor idade
idadeMenor = aluno[0].idade;
para( contAluno = 1; enquanto(contAluno < qtdeAlunos); contAluno
= contAluno + 1)
// Se encontrou idade menor troca
se (aluno[contAluno].idade < idadeMenor) ento
incio
posicaoIdadeMenor = contAluno;
idadeMenor = aluno[contAluno].idade;
fim
// Escreve os dados do aluno com menor idade
se (qtdeAlunos > 0) ento
incio
escreva("O aluno ", aluno[posicaoIdadeMenor].nome, "
com idade ", idadeMenor);
escreva(" residente no endereo ",
aluno[posicaoIdadeMenor].endereco);
escreva(" inscrio na data",
aluno[posicaoIdadeMenor].dataInsc.dia, "/");
escreva(aluno[posicaoIdadeMenor].dataInsc.mes,"/" );
escreva(aluno[posicaoIdadeMenor].dataInsc.ano );
escreva(" tirou a carta em ",
aluno[posicaoIdadeMenor].dataCarta.dia, "/");
escreva(aluno[posicaoIdadeMenor].dataCarta.mes,"/"
Departamento de Matemtica.

Prof. Dr. Fbio Roberto Chavarette


fabioch@mat.feis.unesp.br

);
escreva(aluno[posicaoIdadeMenor].dataCarta.ano );
escreva(" foi o aluno que tirou carta com menor idade
nesta auto escola.");
fim
fim
9 Dado o Registro de um funcionrio de uma empresa com o layout abaixo:
Pede-se:
a) Definir o tipo do registro com o nome
TRFUNC.
b) Fazer um programa C++ que leia as
fichas de funcionrios, a seguir, leia
nmeros de funcionrios encontre o
registro correspondente e escreva seus
dados. Caso contrrio escrever a
mensagem "funcionrio inexistente". O
trmino da busca ocorre quando
fornecido nmero do funcionrio igual a
-1.

10 Dado o Registro com o layout abaixo:


Nome
Dia de Aniversrio
Ms de Aniversrio
Pede-se:
Incluir 10 registros de pessoas (Opo de Incluso)
Mostre em cada um dos meses do ano quem so as pessoas que fazem
aniversrio, exibir tambm o dia. Considere um conjunto de pessoas
includas anteriormente. (Opo de Consulta)
Sada do Programa.
11 Dado o Registro com o layout abaixo:
Nome da loja
Telefone
Preo de um eletrodomstico (Ex: TV)
Pede-se:
Incluir 10 registros de preos (Opo de Incluso)
Calcular a mdia dos preos cadastrados (Opo Mdia)
Exibir uma relao contendo o nome e o telefone das lojas cujo preo estava
abaixo da mdia (Opo Consulta)
Departamento de Matemtica.

Prof. Dr. Fbio Roberto Chavarette


fabioch@mat.feis.unesp.br

Sada do Programa.

12 Tendo um registro contendo RA do aluno, tipo de participao (A, B, C ou D) e


scio da SBC Sociedade Brasileira de Computao (S-sim ou N-no), desenvolver
um algoritmo para calcular o valor que cada aluno vai pagar para participar da
semana das profisses, sabendo-se que:
Tipo de Participao

Valor a Pagar

A - 1 curso
B - 2 cursos
C - 3 cursos
D - outros

R$ 30,00
R$ 60,00
R$ 90,00
R$100,00

Para os scios da SBC o valor a pagar ter um desconto de 50%. O algoritmo


dever permitir a entrada de vrios registros (no mximo 1000) at que uma
condio de finalizao seja satisfeita. Calcular e exibir tambm o total geral
arrecadado com o evento e quantos alunos se matricularam em cada um dos tipos
de participao.

Departamento de Matemtica.

Você também pode gostar