INF 1005 • Programação I • lista 08
Vetores
1. [tarefa 29] Implemente e teste uma função max_vet, que recebe como parâmetro um vetor de
números de ponto flutuante (vet) de tamanho n e retorna o maior número armazenado nesse vetor.
Essa função deve obedecer o seguinte protótipo:
float max_vet (int n, float* vet);
Variações: retornar o menor número; a soma dos números menores que k; a soma dos k menores
números.
2. [tarefa 32] Implemente e teste uma função maiores, que recebe como parâmetro um vetor de
números inteiros (vet) de tamanho n e um valor x. A função deve retornar quantos números
maiores do que x existem nesse vetor. Essa função deve obedecer o seguinte protótipo:
int maiores(int n, int * vet, int x);
3. Implemente e teste uma função que receba um vetor de inteiros (ordenados de forma crescente) e
seu tamanho e retorne o maior valor menor que a média de seus elementos.
4. [tarefa 8] Implemente e teste uma função negativos, que recebe como parâmetro um vetor de
números de ponto flutuante (vet) de tamanho n e retorna quantos números negativos estão
armazenados nesse vetor. Essa função deve obedecer o seguinte protótipo:
int negativos (int n, float* vet);
5. [tarefa 10] Implemente e teste uma função pares, que recebe como parâmetro um vetor de
números inteiros (vet) de tamanho n e retorna quantos números pares estão armazenados nesse
vetor. Essa função deve obedecer o seguinte protótipo:
int pares (int n, int* vet);
6. [tarefa 12] Implemente e teste uma função avalia, que permite a avaliação de polinômios. Cada
polinômio é definido por um vetor contendo seus coeficientes. Por exemplo, o polinômio de grau
2, 3x2+2x+12, terá um vetor de coeficientes igual a v[] = {12, 2, 3}. A função avalia deve
obedecer o protótipo:
double avalia (double* poli, int grau, double x);
Onde o parâmetro poli é o vetor com os coeficientes do polinômio, grau é o grau do polinômio, e
x é o valor para o qual o polinômio deve ser avaliado.
Prof. Gustavo Moreira
[email protected]
Departamento de Informática
Rua Marquês de São Vicente, 225 • Gávea • 22451-900
Rio de Janeiro • RJ • Tel. (21) 3527-1500 r.4353 • Fax (21) 3527-1530
Vetores
7. [tarefa 13] Implemente e teste uma função deriva, que calcula a derivada de um polinômio. Cada
polinômio é definido por um vetor contendo seus coeficientes. Por exemplo, o polinômio de grau
2, 3x2+2x+12, terá um vetor de coeficientes igual a v[] = {12, 2, 3}. A função deriva deve
obedecer o protótipo:
double deriva (double* poli, int grau, double* out);
Onde o parâmetro poli é o vetor com os coeficientes do polinômio, grau é o grau do polinômio, e
out é o vetor no qual a função deve guardar os coeficientes do polinômio resultante da derivada.
Para o exemplo acima, out seria igual a out[] = {3, 6}.
8. [tarefa 14] Implemente e teste uma função desviopadrao para calcular o desvio padrão de um
conjunto de valores. A função recebe como parâmetros um vetor contendo os valores e o número
de valores existentes no vetor. O desvio padrão (std) é definido pela seguinte fórmula, onde é a
média do conjunto de valores:
1
, , … , 1
A função desviopadrao deve obedecer o protótipo:
double desviopadrao(double * v, int n);
Observação: Para o cálculo da raiz quadrada de um número, utilize a função sqrt definida na
biblioteca padrão de funções do C. Essa função está definida no arquivo de cabeçalhos math.h e
tem o protótipo: double sqrt(double n);
9. Implemente e teste um programa que leia uma sequência de 10 números e informe o total de
ocorrências do último número lido.
Exemplo:
38 4 23 5 6 7 4 12 4
Resultado:
O número 4 apareceu 3 vezes
10. Implemente e teste um programa para gerenciar um sistema de reservas de mesas em uma casa de
espetáculo. A casa possui 30 mesas de 5 lugares cada. O programa deverá permitir que o usuário
escolha o código de uma mesa (100 a 129) e forneça a quantidade de lugares desejados. O
programa deverá informar se foi possível realizar a reserva e atualizar os lugares disponíveis nas
mesas. Caso não tenha sido possível efetuar a reserva, o programa deverá emitir uma mensagem
de erro. O programa deve terminar quando o
usuário digitar o código 0 (zero) para uma
mesa ou quando todos os 150 lugares estiverem ocupados.
11. Implemente e teste uma função chamada inverte, que receba como parâmetros um vetor de
números inteiros e seu tamanho, e inverta a ordem dos elementos do vetor, de modo que o
primeiro elemento passe a ser o último, o segundo passe a ser o penúltimo e assim por diante.
12. Implemente e teste uma função ordenado, que receba um vetor de inteiros e seu tamanho, e
retorne -1 se o vetor estiver ordenado de forma crescente, 1 se o vetor estiver ordenado de forma
decrescente, ou 0, caso o vetor não esteja ordenado.
13. Implemente e teste uma função produto_escalar que receba como parâmetros dois vetores de
reais, e um inteiro indicando a quantidade de elementos que os dois vetores têm, e retorne o
produto escalar dos dois vetores.
Exemplo:
X = (1,2,3,5)
Y = (4,3,2,1)
Página 2 de 6
Vetores
X.Y = 4.1 + 2.3 + 3.2 + 5.1 = 4 + 6 + 6 + 5 = 21
14. Implemente e teste uma função que receba um vetor de n números inteiros positivos e retorne a
maior diferença (em módulo) entre dois elementos consecutivos deste vetor.
Exemplo:
V = (1,2,4,7,8)
A maior diferença em módulo é 3.
15. Escreva os protótipos das funções utilizadas pelas seguintes funções main().
a)
int main (void)
{
int v[6]={0,10,20,40,50,60}, y;
float x, z;
...
x = f (10);
g (x, &y);
g (z, &v[4]);
z = h (v[5], v);
...
}
b)
int main (void)
{
int a, b[10];
char d, e[10];
float g, h[10];
...
faz_tudo (a, &d, &g);
g = faz_nada (a, b[1], b);
nao_sei (3.14, g, h[2], &h[3]);
e[a] = ta_certo ();
...
}
Página 3 de 6
Vetores
c)
int main (void)
{
int v[6]={0, 10, 20, 40, 50, 60},y;
float x, z;
...
x = f (10);
g (x, &y);
g (z, &v[4]);
z = h (v[5], v);
...
}
16. Escreva as funções necessárias para que os programas abaixo funcionem conforme o esperado:
a)
#include <stdio.h>
int main (void)
{
int a, b, c, erro;
scanf (“%d%d”, &a, &b);
c = divide (a, b, &erro);
if (erro)
printf (“Erro: divisão por zero\n”);
else
printf (“%d dividido por %d = %d\n”, a, b, c);
}
b)
#include <stdio.h>
void main (void)
{
int v[5]={1, 2, 3, 4, 5}, i, j;
printf (“\nDigite as posições do vetor que devem ser trocadas”);
scanf (“%d%d”, &i, &j);
troca (v, i, j);
for (i=0; i<5; i++)
printf (“%d\n”, v[i]);
}
Página 4 de 6
Vetores
17. Considere a função main() abaixo:
void main (void)
{
int el[100],qtd;
puts (“Entre com o número de elementos a serem lidos”);
scanf (“%d”,&qtd);
le_vet (el,qtd);
computa (el,qtd);
imprime (el,qtd);
descomputa (el,qtd);
imprime (el,qtd);
}
Implemente e teste as seguintes funções:
a) le_vet(): esta função lê n elementos de um vetor, onde o número de posições e o vetor são
recebidos como parâmetros.
b) imprime(): esta função imprime n elementos de um vetor, onde o número de posições e o
vetor são recebidos como parâmetros.
c) computa(): esta função soma a cada elemento do vetor todos os seus subseqüentes, onde o
número de posições e o vetor são recebidos como parâmetros.
d) descomputa(): esta função restaura os valores originais do vetor, onde o número de posições
e o vetor são recebidos como parâmetros.
Exemplo:
Vetor original:
6
3
2
9
Vetor após a execução da função computa():
20 14 11 9
Vetor após a execução da função descomputa():
6
3
2
9
18. Faça uma função que receba um vetor de reais e seu tamanho (inteiro) como parâmetros e
inicialize com zero (0) todos os elementos do vetor.
19. Faça uma função que receba um vetor de inteiros, seu tamanho (inteiro) e uma chave (inteiro)
como parâmetros. A função deve retornar a posição da chave no vetor ou -1, caso a chave não
faça parte do vetor.
Página 5 de 6
Vetores
20. Faça um programa que simule o jogo da senha, sorteando uma sequência de 4 peças coloridas
(R=vermelho, G=verde, Y=amarelo, B=azul, podendo haver repetição de cores), que o jogador
tenta adivinhar. A cada tentativa, o jogador informa uma sequência de 4 cores e o programa
informa quantas peças estão na posição correta e quantas estão com as cores corretas, mas na
posição errada. Implemente pelo menos uma função auxiliar que receba como parâmetros: um
vetor com a jogada correta (4 posições), um vetor com a tentativa do jogador (4 posições) e dois
ponteiros para inteiros: um correspondente ao número de peças corretas (cor e posição) e outro ao
número de peças com apenas a cor correta. Caso o jogador tenha acertado todas as peças (vetores
iguais), a função deve retornar o valor 0; caso contrário, deve retornar 1. Quando o jogo terminar,
o programa deve indicar o número de tentativas que o jogador precisou para acertas.
Para sortear as peças, utilize as seguintes funções:
/* biblioteca stdlib */
void srand(unsigned int seed); /* define a semente da sequência de números pseudoaleatórios */
int rand(void); /* gera um número pseudoaleatório entre de 0 a RAND_MAX */
/* biblioteca time */
time_t time(time_t *timer); /* devolve a hora atual */
/*
Para gerar números aleatórios, geralmente se utiliza:
- uma única vez, no início do programa:
srand ( (unsigned)time ( NULL ) );
- para gerar cada número aleatório entre a e (a+b-1), inclusive:
a + rand() % b
*/
Página 6 de 6
Download

lista 08 vetores - Departamento de Informática - PUC-Rio