Nome do aluno: Turma:
Assinatura:
Professor(a):
N
USP:
Curso:
Instruções:
| Questão | Nota |
| 1 | |
| 2 | |
| 3 | |
| Total |
Questão 1 (valor: 3.0)
Simule a execução do programa abaixo destacando a sua saída (o que vai sair na tela). Dados de entrada (a serem lidos):
7 3 6 1 4 7 8 5
/*************************************************************/
#include <stdio.h>
#define NMAX 100
void leia_vetor(int v[], int n);
void imprima_vetor(int v[], int n);
int eh_alternante(int v[], int n);
void min_max(int v[], int n, int *pmin, int *pmax);
/*************************************************************/
int main()
{
int a[NMAX];
int n, menor, maior;
scanf("%d", &n);
leia_vetor(a, n); imprima_vetor(a, n);
if (eh_alternante(a, n))
printf("A sequencia dada e' alternante.\n");
else
printf("A sequencia dada nao e' alternante.\n");
min_max(a, n, &menor, &maior);
printf("Menor = %d Maior = %d\n", menor, maior);
return 0;
}
/*************************************************************/
void leia_vetor(int v[], int n)
{
int i;
for (i = 0; i < n; i++)
scanf("%d", &v[i]);
}
void imprima_vetor(int v[], int n)
{
int i;
printf("Os elementos da sequencia sao: ");
for (i = 0; i < n; i++)
printf("%d ", v[i]);
printf("\n");
}
int eh_alternante(int v[], int n)
{
int i, p;
for (i = 0; i < n - 1; i++) {
p = v[i] + v[i + 1];
printf("%d: %d\n", i, p);
if (p % 2 == 0)
return 0;
}
return 1;
}
void min_max(int v[], int n, int *pmin, int *pmax)
{
int i;
*pmin = v[0]; *pmax = v[0];
for (i = 1; i < n; i++) {
if (v[i] < *pmin) *pmin = v[i];
if (v[i] > *pmax) *pmax = v[i];
printf("[%d: %d %d]\n", i, *pmin, *pmax);
}
}
/*************************************************************/
Questão 2 (valor: 3.0)
Dizemos que uma matriz inteira é
-crescente
se essa matriz tem a seguinte propriedade: seus elementos são números inteiros
positivos menores ou iguais a
, e estes crescem estritamente ao longo de
cada linha, da esquerda para a direita. No exemplo abaixo
temos uma matriz
-crescente:
4 7 8 10 17 28
2 3 5 8 15 25
8 10 14 16 20 48
7 8 9 12 18 45
Note que cada linha está ordenada crescentemente de maneira
estrita.
int eh_crescente(int v[], int n);que verifica se os n elementos do vetor fornecido v[] estão em ordem estritamente crescente, isto é, se
v[0] < v[1] < ... < v[n-1]A sua função deve devolver 1 se v[] estiver em ordem estritamente crescente, e deve devolver 0 caso contrário.
int eh_K_crescente(int a[][NMAX], int m, int n, int K);que verifica se a matriz m x n fornecida a é K-crescente. Neste item, você deve usar a função eh_crescente() acima, mesmo que você não a tenha escrito.
4 6 2 3 5 8 15 25 4 7 8 10 17 28 8 10 14 16 20 48 7 8 9 12 18 45 50(Note que
Matriz eh 50-crescente. Matriz eh tambem 48-crescente, mas nao eh 47-crescente.Neste item, você deve usar a função eh_K_crescente() acima, mesmo que você não a tenha escrito.
Questão 3 (valor: 4.0)
Um polinômio real
de grau no máximo
é dado por
Observe que um tal polinômio
pode ser representado por um vetor,
digamos p[0..n] (naturalmente, o elemento p[0] do vetor
contém o valor do coeficiente
, o elemento p[1] do vetor contém
o valor do coeficiente
, e assim por diante).
void leia_pol(double p[], int n);que lê os coeficientes de um polinômio
3 1 2 0 -1Note que estamos supondo que o usuário fornecerá o grau do polinômio explicitamente (o inteiro 3 acima).
void imprima_pol(double p[], int n);que imprime os coeficientes do polinômio de grau n representado no vetor p[]. Se
grau: 3 coeficientes: 1 2 0 -1
double valor(double p[], int n, double x);que recebe em p[] (os coeficientes) de um polinômio
3 1 2 0 -1 4 0 0.5 1 2e a saída deverá ser
grau: 3 coeficientes: 1 2 0 -1 p(0) = 1 p(0.5) = 1.875 p(1) = 2 p(2) = -3
Observação. Nesta questão, você deve supor que todos polinômios têm grau no máximo 999.