Solicitação de algoritmo 3

A solicitação foi realizada por Lendel dos Santos Rodrigues. A dúvida envolve um enunciado maior, mas era específica em apenas um ponto da questão, então fiz reduções no código apenas para a dúvida específica. O enunciado segue abaixo, mas a dúvida envolvia a utilização da expressão sen(i)/cos(i) dentro do problema.

Enunciado: defina em uma unidade independente: um novo tipo, usando typedef, para representar um vetor com as seguintes características: quantidade máxima de componentes: 50; componentes reais. Criar uma função independente para: calcular os n (1 <= n <= 50) componentes reais do vetor através da expressão sen(i) / cos(i).

O código enviado foi bem estruturado em 3 arquivos, um contendo a função principal, o arquivo de header das funções e o outro as funções propriamente ditas. O código estava inclusive comentado, o que é muito bom. Segue os códigos contidos nos 3 arquivos. Eu removi dos códigos aquilo que não objeto de dúvida da solicitação.

//arquivo main.ccp
#include <iostream>
#include <cmath>
#include "Funcoes15003.h"
			
using namespace std;

int main (){
	Vetor v; 
	int n;
	sortear(v,n);
	return 0;
}
//arquivo Funcoes15003.ccp
#include "Funcoes15003.h"
#include <cstdlib>	// para as funções srand e rand
#include <ctime>	// para a função time
#include <cmath>

void sortear(Vetor &v, int n) {
	srand(time(0));		// Inicializa gerador
	for(int i = 0; i < n; i++) // Varia de 0 até n -1
	v[i] = rand() % 51;// Sorteia os componentes
}
//arquivo Funcoes15003.h
#ifndef VETORES_H
#define VETORES_H
const int MAX = 50;

typedef int Vetor[MAX];

void sortear(Vetor &v, int n);
#endif

Vamos as correções, começando com o arquivo de header. Nele uma correção necessária é na definição do typedef. A questão solicitava um vetor com valores reais e foi especificado no código um vetor de inteiros. A correção deve ser feita na linha 6, alterando ela para: typedef float Vetor[MAX];

//arquivo Funcoes15003.h
#ifndef VETORES_H
#define VETORES_H
const int MAX = 50;

typedef float Vetor[MAX];

void sortear(Vetor &v, int n);
void mostrar(Vetor &v, int n);
#endif

Como o objetivo da questão está em preencher um vetor com valores, eu especifiquei uma função para mostrar os valores do vetor e ela já está aparecendo no header.

O Lendel preencheu o vetor em sua função com valores aleatórios entre 0 e 50. É no preenchimento do vetor que paira dúvida da solicitação. O enunciado, que pede que o preenchimento seja feito com o resultado da expressão sen(i) / cos(i). A alteração segue abaixo. Um detalhe importante é que a função para o seno é a função sin() e não sen() como aparece no enunciado.

#include "Funcoes15003.h"
#include <cmath>

#include <iostream>
using namespace std;

void sortear(Vetor &v, int n) {
	for(int i = 0; i < n; i++)
                v[i] = sin(i+1)/cos(i+1);
}

void mostrar(Vetor &v, int n) {
	for(int i = 0; i < n; i++)
                cout << v[i] << ", ";
}

Veja que o enunciado solicitou a variação de
1 <= n <= 50. Como os valores da variável i do laço de repetição estão variando de 0 até 49, fiz a expressão com o valor de i acrescido de 1.

A alteração foi bem simples. A dúvida do Lendel deve ter sido realmente na interpretação do que era necessário fazer na questão. Um detalhe é que para utilizar as funções sin() e cos() é preciso fazer a inclusão da biblioteca cmath (feita na linha 2).

Vendo agora o arquivo com o código da função principal temos algumas modificações. Eu removi a inclusão da biblioteca cmath já que ela não é necessária nesse arquivo, apenas no que contem a codificação das funções. Eu também fiz a inicialização da variável n. O uso de variáveis não inicializadas é grave, embora seja um esquecimento corriqueiro.

#include <iostream>
#include "Funcoes15003.h"

using namespace std;

int main () {
	Vetor v;
	int n=50;
	sortear(v,n);
	mostrar(v,n);

        return 0;
}

Share

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Esse site utiliza o Akismet para reduzir spam. Aprenda como seus dados de comentários são processados.