Dados dois números naturais m
e n
e duas sequências ordenadas com m > 0
e n > 0
números inteiros, obter uma única sequência ordenada contendo todos os elementos das sequências originais sem repetição.
Sugestão: Imagine uma situação real, por exemplo, dois fichários de uma biblioteca.
Obs.: Esse problema é o exercício 8 da lista de exercícios sobre vetores.
#include <stdio.h>
#define MAX 1000
int main(){
int seq1[MAX], seq2[MAX], seq_ordenada[MAX];
int m, n, num, i, j, k;
printf("Digite o numero de elementos da primeira sequencia: ");
scanf("%d", &m);
for (i = 0; i < m; i++){
printf("Digite o %do. numero da primeira sequencia: ", i+1);
scanf("%d", &num);
seq1[i] = num;
}
printf("Digite o numero de elementos da segunda sequencia: ");
scanf("%d", &n);
for (i = 0; i < n; i++){
printf("Digite o %do. numero da segunda sequencia: ", i+1);
scanf("%d", &num);
seq2[i] = num;
}
j = i = k = 0;
while (i < m && j < n) {
if (seq1[i] < seq2[j]) {
num = seq1[i];
i++;
}
else {
num = seq2[j];
j++;
}
if (k == 0 || seq_ordenada[k-1] != num){
seq_ordenada[k] = num;
k++;
}
}
while (i < m) {
seq_ordenada[k] = seq1[i];
i++;
k++;
}
while (j < n) {
seq_ordenada[k] = seq2[j];
j++;
k++;
}
printf("A sequencia final ordenada eh: \n");
for (i = 0; i < k; i++)
printf("%d ", seq_ordenada[i]);
printf("\n");
return 0;
}
int acha (float V[MAX], int n, float x);
que devolve a posição em que o real x
ocorre no vetor V
ou devolve -1
se x
não aparece no vetor. O número de elementos do vetor é n
.
int acha(float V[MAX], int n, float x){
int i = 0;
while (i < n && V[i] != x)
i++;
if (i != n)
return i;
return -1;
}
int acha(float V[MAX], int n, float x){
int i = 0;
V[n] = x; /* sentinela */
while (V[i] != x)
i++;
if (i != n)
return i;
else
return -1;
}
int insere (float V[MAX], int n, float x);
que insere x
na última posição do vetor V
e retorna o novo valor de n
.
#### Solução
int insere (float V[MAX], int n, float x){
V[n] = x;
return n+1;
}
#include <stdio.h>
#define MAX 1000
int acha1 (float V[MAX], int n, float x);
int acha2 (float V[MAX], int n, float x);
int insere (float V[MAX], int n, float x);
int main(){
float seq[MAX], num;
int n, i, k = 0;
printf("Digite o numero de elementos da sequencia: ");
scanf("%d", &n);
for (i = 0; i < n; i++){
printf("Digite o %do. numero da sequencia: ", i+1);
scanf("%f", &num);
if (acha1(seq,k,num) == -1)
k = insere(seq,k,num);
}
printf("\nA sequencia sem repeticoes eh: \n");
for (i = 0; i < k; i++)
printf("%f ", seq[i]);
printf("\n");
return 0;
}
Escreva uma função que recebe um inteiro positivo k
e um vetor com os k+1
coeficientes reais de um polinômio de grau k
, e outro real x
, e devolva o valor do polinômio no ponto x
. Considere que o coeficiente de xi
está guardado na posição i
do vetor.
Usando a função anterior, escreva um programa que leia dois inteiros k
e n
, os k+1
coeficientes de um polinômio de grau k
, e outros n
números reais, e imprima o valor do polinômio para cada um desses n
números.
#### Solução
#include <stdio.h>
#define MAX 100
float valor_polinomio(int k, float a[MAX], float x);
int main() {
float coeficientes[MAX], x;
int k, n, i;
printf("Digite o grau do polimônio p: ");
scanf("%d", &k);
printf("Digite os coeficientes do polimônio p: \n");
for (i = 0; i <= k; i++){
printf("Digite o coeficiente de x^%d: ", i);
scanf("%f", &coeficientes[i]);
}
printf("Digite a quantidade de valores: ");
scanf("%d", &n);
for (i = 0; i < n; i++){
printf("Digite um valor de x: ");
scanf("%f", &x);
printf("p(%f) = %f\n\n", x, valor_polinomio(k,coeficientes,x));
}
return 0;
}
float valor_polinomio(int k, float a[MAX], float x){
float soma = 0, potx = 1;
int i;
for (i = 0; i <= k; i++){
soma += a[i] * potx;
potx *= x;
}
return soma;
}
Escreva uma função que recebe como parâmetro um inteiro não-negativo k
e um vetor p
com os k+1
coeficientes reais de um polinômio de grau k
e altera k
e p
de modo que eles passem a armazenar o grau e os coeficientes da derivada do polinômio de entrada.
Escreva um programa que leia um inteiro não-negativo k, os k+1 coeficientes de um polinômio real p0 de grau k, três reais x0, x1 e x2 e calcule p0(x0), p1(x1) e p2(x2), onde p1 e p2 são respectivamente a primeira e a segunda derivada do polinômio p0. Use a função do item (a) e a função do item (a) do Problema Extra 1.
#### Solução
#include <stdio.h>
#define MAX 100
float valor_polinomio(int k, float a[MAX], float x);
int derivada(int n, float a[MAX]);
int main() {
float coeficientes[MAX], x0, x1, x2;
int k, i;
printf("Digite o grau do polimônio p: ");
scanf("%d", &k);
printf("Digite os coeficientes do polimônio p: \n");
for (i = 0; i <= k; i++){
printf("Digite o coeficiente de x^%d: ", i);
scanf("%f", &coeficientes[i]);
}
printf("Digite tres numeros reais: ");
scanf("%f %f %f", &x0, &x1, &x2);
printf("p0(%f) = %f\n\n", x0, valor_polinomio(k,coeficientes,x0));
k = derivada(k,coeficientes);
printf("p1(%f) = %f\n\n", x1, valor_polinomio(k,coeficientes,x1));
k = derivada(k,coeficientes);
printf("p2(%f) = %f\n\n", x2, valor_polinomio(k,coeficientes,x2));
return 0;
}
float valor_polinomio(int k, float a[MAX], float x){
float soma = 0, potx = 1;
int i;
for (i = 0; i <= k; i++){
soma += a[i] * potx;
potx *= x;
}
return soma;
}
int derivada(int n, float a[MAX]){
int i;
for (i = 0; i < n; i++)
a[i] = (i+1) * a[i+1];
return n-1;
}