Você está na página 1de 8

Instituto Federal de Educação Ciência e Tecnologia da Paraíba

Engenharia Mecânica
Algoritmos e Lógica de Programação - 2021.1

UNIDADE 02

- A atividade é individual;
- A solução deve ser desenvolvida em linguagem C. Atenção às boas práticas
como: indentação, identificadores bem definidos, etc;
- Com esta avaliação você apenas poderá no MÁXIMO cem (100) pontos.
- Entrega:
- Google DOCs com o código;
- Vídeo (máximo 15min) com explicação e execução do código;
- Entregas parciais serão aceitas e pontuadas de acordo com rúbrica;
- Entregas em atraso: 20% de desconto na nota obtida

Contextualização - Variância e desvio padrão

Na estatística o conjunto de dados é definido como população quando representa todos os


elementos possíveis ou, ainda, uma amostra quando representa parte da população.

Variância e desvio padrão são medidas de dispersão que indicam a regularidade de um


conjunto de dados em função da média aritmética. Neste caso, quanto menor for a
variância, mais próximo serão os valores em relação à média. Porém, quanto maior for essa
medida, mais distantes os valores estarão da média.

Assim, para calcular a média(1), a variância(2) e o desvio padrão(3) para população temos
as seguintes fórmulas:

Perceba que o desvio padrão é a raiz quadrada da variância.

Considerando as fórmulas mostradas é importante saber que para amostras a fórmula da


variância se apresenta como a seguir:
Problema Proposto - Calculadora do Desvio Padrão

Desenvolva um programa que apresente o seguinte menu:

"1 - Cadastrar conjunto de dados"


"2 - Visualizar dados"
"3 - Editar dados"
"4 - Calcular variância e desvio padrão"
"5 - Excluir dados"
"(QUALQUER outra tecla para Finalizar)"
"Opção Escolhida: "

O programa deve:

1. (15 pontos) No cadastro (opção 01):


a. perguntar e salvar se os dados são referentes a uma amostra ou população;
b. perguntar e salvar o tamanho do conjunto de dados; e
c. alocar um vetor dinamicamente de números reais (float);
2. (10 pontos) Para visualizar os dados (Opção 2) imprimir o vetor de forma
organizada;
3. (10 pontos) Ao editar os dados (Opção 3), imprimir uma visualização de dados e
perguntar qual índice quer modificar;
4. (10 pontos) No cálculo (opção 4) imprimir:
a. dados
b. média
c. variância
d. desvio padrão
5. (10 pontos) Na Opção 5 perguntar se o usuário tem certeza da exclusão e dar a
possibilidade de retornar ao menu sem a efetivar;
6. (10 pontos) Para qualquer tecla diferente das opções, considerar que o usuário que
finalizar. Assim, é preciso verificar se o usuário deseja mesmo sair, verificar se há
um conjunto de dados e avisar que em caso de saída os dados serão perdidos;
7. (10 pontos) Permitir o cadastro de conjunto de dados (opção 1) apenas se não tiver
dados cadastrados. Ao excluir dados (opção 5) deve permitir novo cadastro;
8. (15 pontos) Conter, pelo menos, as funções:
a. void exibir_erro(int codigo): para exibir mensagens de erro a
partir de um código;
b. float media(int tamanho, float* vetor): para calcular a média;
c. float variancia(int n, float* vetor, float media): para
calcular a variância;
d. float desvio_padrao(float variancia): para calcular o desvio
padrão;

9. (10 pontos) A todo instante não aceitar opções diferentes das exibidas no menu,
apresentando mensagem de erro e possibilitando a escolha de uma nova opção.
//Thauã Marmo Bronzeado Lima 202111140028

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <math.h>
float variancia(int n, float* vetor, float media);
float media(int n, float* vetor);
void exibir_erro(int codigo);
float desvio_padrao(float variancia2);
float variancia1(int n, float* vetor, float media);
int main(void) {
int opçao, tamanho, dados = 0, tipo_variancia = 0, posiçao_valor;
int i;
char resposta [0], opçao_saida[0], opçao_dados[0];
float *vetor, valor;
menu:
printf("1 - Cadastrar conjunto de dados\n");
printf("2 - Visualizar dados\n");
printf("3 - Editar dados\n");
printf("4 - Calcular variância e desvio padrão\n");
printf("5 - Excluir dados\n");
printf("(QUALQUER outra tecla para Finalizar)\n");
printf("Opção Escolhida: ");
scanf("%d", &opçao);
switch (opçao){
case 1 :
if(dados == 0){
do{
printf("Os dados são referentes a uma amostra ou população?(a
ou p)\n");
scanf("%s", resposta);
if(strcmp (resposta,"a") == 0){
tipo_variancia = 1;//amostra
}
else if(strcmp (resposta,"p") == 0){
tipo_variancia = 2;//populaçao
}
else{
exibir_erro(1);
}
}
while((tipo_variancia != 1)&&(tipo_variancia != 2));
do{
printf("Qual o tamanho do seu conjunto de dados?\n");
scanf("%d", &tamanho);
if(tamanho <= 0){
exibir_erro(5);
}
}
while(tamanho <= 0);
vetor = (float*) malloc(tamanho*sizeof(float));
if(vetor == NULL){
exibir_erro(4);
}
for(i = 0 ; i < tamanho ; i++){
printf("Digite o valor do elemento da posição [%d] : ", i);
scanf("%f", &vetor[i]);
}
dados = 1;
}
else{
exibir_erro(3);
}
break;
case 2 :
if(dados == 1){
for(i = 0 ; i < tamanho ; i++){
printf("Posição: [%d] - Valor: [%.1f]\n", i,
vetor[i]);
}
}
else{
exibir_erro(2);
}
break;
case 3 :
if(dados == 1){
for(i = 0 ; i < tamanho ; i++){
printf("Posição: [%d] - Valor: [%.1f]\n", i,
vetor[i]);
}
do{
printf("Informe a posição em que deseja trocar o valor:\n");
scanf("%d", &posiçao_valor);
if((posiçao_valor < 0)||(posiçao_valor > tamanho - 1)){
exibir_erro(5);
}
}
while((posiçao_valor < 0)||(posiçao_valor > tamanho - 1));

printf("Informe o novo valor:\n");


scanf("%f", &valor);
vetor[posiçao_valor] = valor;
for(i = 0 ; i < tamanho ; i++){
printf("Posição: [%d] - Valor: [%.1f]\n", i,
vetor[i]);
}
}
else{
exibir_erro(2);
}
break;
case 4 :
if(dados == 1){
printf("Dados: {");
for(i = 0 ; i < tamanho ; i++){
printf(" %.1f", vetor[i]);
}
printf(" }\n");
printf("Média = %f\n", media(tamanho, vetor));
if(tipo_variancia == 1){//amostra
printf("Variância = %f\n",
variancia1(tamanho,vetor,media(tamanho, vetor)));
printf("Desvio Padrão = %f\n",
desvio_padrao(variancia1(tamanho,vetor,media(tamanho, vetor))));
}
else if(tipo_variancia == 2){//populaçao
printf("Variância = %f\n",
variancia(tamanho,vetor,media(tamanho, vetor)));
printf("Desvio Padrão = %f\n",
desvio_padrao(variancia(tamanho,vetor,media(tamanho, vetor))));
}
}
else{
exibir_erro(2);
}
break;
case 5 :
if(dados == 1){
exclusão:
printf("Você tem certeza que deseja excluir os dados? (s ou
n)\n");
scanf("%s", opçao_dados);
if(strcmp (opçao_dados,"s") == 0){
printf("Dados excluídos.\n");
free(vetor);
dados = 0;
}
else if(strcmp (opçao_dados,"n") == 0){
printf("Os dados não serão excluídos.\n");
}
else{
exibir_erro(1);
goto exclusão;
}
}
else{
exibir_erro(2);
}
break;
default:
do{
if(dados == 1){
printf("Você tem certeza que deseja finalizar o programa? (s
ou n)\n");
printf("OBS: Você possui dados cadastrados, finalizar o
programa fará com que perca-os. \n");
}
else{
printf("Você tem certeza que deseja finalizar o programa? (s
ou n)\n");
printf("OBS: Você não possui dados cadastrados.\n");
}
scanf("%s", opçao_saida);
if(strcmp (opçao_saida,"s") == 0){
printf("Finalizando...\n");
exit(1);
}
else if(strcmp (opçao_saida,"n") == 0){
break;
}
else{
exibir_erro(1);
}
}
while((strcmp(opçao_saida,"s") != 0)&&(strcmp(opçao_saida,"n")
!= 0));
}
goto menu;
}
void exibir_erro(int n){
if(n == 1){
printf("[ERRO]\nInsira uma opção válida.\n");
}
if(n == 2){
printf("[ERRO]\nNão há dados cadastrados.\n");
}
if(n == 3){
printf("[ERRO]\nJá há dados cadastrados.\n");
}
if(n == 4){
printf("[ERRO]\nMemória insuficiente.\n");
printf("Finalizando o programa.\n");
exit(1);
}
if(n == 5){
printf("[ERRO]\nInsira um valor válido.\n");
}
}
float media(int tamanho, float* vetor){
float somador = 0.0;
int i;
for(i = 0; i < tamanho ; i++){
somador += vetor[i];
}
return somador/tamanho;
}
float variancia(int tamanho, float* vetor, float media){
float somador = 0.0;
int i;
for(i = 0; i < tamanho ; i++){
somador += (vetor[i] - media) * (vetor[i] - media);
}
return somador/tamanho;
}
float desvio_padrao(float variancia){
return sqrt(variancia);
}
float variancia1(int tamanho, float* vetor, float media){
float somador = 0.0;
int i;
for(i = 0; i < tamanho ; i++){
somador += (vetor[i] - media) * (vetor[i] - media);
}
return somador/(tamanho - 1);
}

Você também pode gostar