Buscar

Lista 2 - Programação em C/C++

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

1. (7,0) Utilizando alocação dinâmica de memória, implemente um programa que permita ao usuário 
escolher entre um conjunto de funcionalidades relativas ao tratamento de uma folha de pagamento 
de uma empresa. Cada uma dessas funcionalidades deverá ser implementada como uma função, a 
saber: 
a. Entrar com a matrícula, sexo, salário e índice de produtividade (de 0,1 à 1,0) de cada um de 
seus n funcionários. 
b. Calcular a média salarial. 
c. Calcular o maior salário. 
d. Calcular o menor salário. 
e. Calcular a quantidade de salários maiores que a média salarial. 
f. Calcular a quantidade de salários menores que a média salarial. 
g. Calcular a quantidade de salários iguais a média salarial. 
h. Retornar a matrícula dos os funcionários que tem salário maior que a média salarial 
i. Retornar a matrícula dos os funcionários que tem salário menor que a média salarial. 
j. Retornar a matrícula dos os funcionários que tem salário igual a média salarial. 
k. Calcular gratificação salarial baseado na seguinte fórmula: gratificação = índice de 
produtividade * percentual do salário, onde percentual do salário é igual à: 
i. 100% para salários abaixo da média salarial. 
ii. 80% para os salários menores que (média_salarial + maior_salário) / 2. 
iii. 50% para os demais salários. 
l. Calcular o maior e o menor salário levando em conta as gratificações. O 
 
Observações: 
a. A quantia de funcionários é indefinida e não deve haver desperdício nem falta de memória 
relativo a esta quantia (i.e. utilizar alocação dinâmica de memória). 
b. As funcionalidades devem ser tratadas por funções. 
c. Funcionalidades efetivamente parecidas devem ser tratadas por uma única função cuja 
diferenciação será feita por meio de parâmetros da função e estruturas de decisão. Isto significa 
que se deve evitar a repetição de código/funções. 
d. Pelo menos a função que calculará o maior e o menor salário (considerando a gratificação) terá 
estes resultados devolvidos por meio de parâmetros por referência.Escreva um algoritmo que 
armazene o valor 10 em uma variável A e o valor 20 em uma variável B. A seguir (utilizando 
apenas atribuições entre variáveis) troque os seus conteúdos fazendo com que o valor que está 
em A passe para B e vice-versa. Ao final, exibir os valores que ficaram armazenados nas 
variáveis. 
 
Pontifícia Universidade Católica de Minas Gerais 
Campus Belo Horizonte 
Curso: Engenharia Mecânica/Elétrica 
Disciplina: Programação de Computadores II 
Professor: Francisco Borges Rodrigues 
Lista de Exercícios II – 26 de abril de 2014 – 7 pontos + 8 extras 
2. (8,0) Implemente uma função para cada uma das funcionalidades apresentadas abaixo: 
a. Ordernar um vetor de inteiros em ordem crescente ou decrescente. 
void ordernarVetor(int *vetor, int tam, char tipoOrdenacao), 
onde tipoOrdenacao poderá recer os valores 'c' para crescente e 'd' para decrescente. 
b. Somar os elementos de uma matriz de inteiros MxN. 
int somarMatriz(int tamM, int tamN, int mat[M][N]) 
c. Trocar linhas de uma matriz 5x5 de inteiros sequencialmente da seguinte forma: troca-se os 
elementos da segunda com os da quinta linha; e, troca-se os elementos da primeira com os 
da quarta coluna. 
void trocaElementosMatriz(int tamM, int tamN, int mat[M][N]) 
d. Girar uma matriz 5x5 em 90º no sentido horário. 
void giraMatriz(int tamM, int tamN, int mat[M][N]) 
e. Multiplicar dois vetores de números inteiros e retornar o resultado da multiplicação em um 
terceiro vetor. 
int *multiplicaVetores(int *v1, int tamV1, int *v2, int tamV2) 
f. A partir de dois vetores, retorne um vetor ordenado em ordem crescente contendo os 
elementos dois vetores. 
int *ordenaVetores(int *v1, int tamV1, int *v2, int tamV2) 
g. Dados dois vetores, verificar se um vetor é anagrama do outro. Ex: v1: Ator v2: Rota – v1 
e v2 são anagramas 
boolean isAnagrama(char *v1, int tamV1, char *v2, int tamV2) 
h. Calcular a distância percorrida e o tempo de viagem (minutos) a partir de um vetor contendo, 
sequencialmente, as cidades visitadas e uma matriz 10x10 que contém as distâncias entre as 
cidades. A velocidade média foi de 100 km/h. 
int distanciaTempoViagem(int *v, int tamV, int mat[10][10], 
int *tempoTotal) 
 
OBSERVAÇÕES IMPORTANTES: 
1. Deverá ser entregue um arquivo compactado (formato ZIP) contendo os códigos fonte (arquivos .c) 
referentes às soluções da questão 1 e um arquivo .h, nomeado com o nome do aluno (por ex.: 
Joaquim.h), contendo as implementações das funções com referentes à questão 2. As funções devem 
utilizar as assinaturas estabelecidas em cada uma das funcionalidades a serem implementadas. 
2. O arquivo mencionado anteriormente deverá ser submetido, via SGA, até as 09:00 do dia 
26/04/2014.

Outros materiais