Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // Nao se preocupem com isso
- #define RED "\x1b[31m"
- #define GREEN "\x1b[32m"
- #define RESET "\x1b[0m"
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- #include <math.h>
- /**Se o montante gasto por um cliente em um dia particular � maior ou igual ao dobro da mediana
- * dos ultimos dias uma notifica�ao sobre potencial fraude � enviada ao
- * cliente.
- */
- /**Nenhuma notifica�ao � enviada ao cliente caso o banco antes de um
- * certo numero de dias, pois n�ao existem dados o suficiente para se calcular a
- * mediana. Essa quantidade de dias � definida pela variavel intervalo.
- */
- void InsertionSort(int *vetor, int n)
- {
- int i, j, temp;
- for (j=1; j<n; j++)
- {
- i = j-1;
- temp = vetor[j];
- while (i>=0 && temp < vetor[i])
- {
- vetor[i+1] = vetor[i]; //Isto aqui est� certo
- i--;
- }
- vetor[i+1] = temp;
- }
- }
- // mediana : recebe um vetor desordenado e seu tamanho e retorna o valor da mediana dos valor. Assuma que o tamanho eh sempre impar.
- int mediana(int * vetor, int tamanho) {
- // SEU CODIGO AQUI
- if (tamanho%2 == 0)
- return 0;
- InsertionSort(vetor,tamanho);
- return vetor[tamanho / 2];
- }
- // numNotificacoes : recebe um vetor, seu tamanho e o tamanho do intervalo.
- // Retorna o numero de notificacoes que o cliente ira receber segundo o criterio estabelecido na especificacao do problema
- int numNotificacoes(int * vetor, int tamanho, int intervalo) {
- int resultado = 0;
- // SEU CODIGO AQUI
- int i;
- for (i=1; i<tamanho; i++)
- {
- if (i > intervalo)
- {
- if (mediana(vetor+i-intervalo,intervalo)*2 >= vetor[i]) //A aritm�tica de ponteiros que entrega o vetor correto mas que n�o funcionou para os casos � vetor+i-intervalo-1
- {
- resultado++;
- }
- }
- }
- return resultado;
- }
- int main() {
- int tamanho, intervalo, resultado;
- int * vetor;
- int i;
- printf("---Testes de Validacao---\n");
- printf("1. "); //InsertionSort resolve o problema sem dificuldades.
- tamanho = 9;
- intervalo = 5;
- vetor = (int *) malloc(tamanho * sizeof(int));
- vetor[0] = 2;
- vetor[1] = 3;
- vetor[2] = 4;
- vetor[3] = 2;
- vetor[4] = 3;
- vetor[5] = 6;
- vetor[6] = 8;
- vetor[7] = 4;
- vetor[8] = 5;
- resultado = numNotificacoes(vetor, tamanho, intervalo);
- if (resultado == 2) {
- printf(GREEN " PASS!\n" RESET);
- }
- else {
- printf(RED " FAIL. %d != 2\n" RESET, resultado);
- }
- free(vetor);
- /**----------------------------------------------------*/
- printf("2. ");
- tamanho = 5;
- intervalo = 4;
- vetor = (int *) malloc(tamanho * sizeof(int));
- vetor[0] = 1;
- vetor[1] = 2;
- vetor[2] = 3;
- vetor[3] = 4;
- vetor[4] = 4;
- resultado = numNotificacoes(vetor, tamanho, intervalo);
- if (resultado == 0) {
- printf(GREEN " PASS!\n" RESET);
- }
- else {
- printf(RED " FAIL. %d != 0\n" RESET, resultado);
- }
- free(vetor);
- /**----------------------------------------------------*/
- printf("3. "); //Para este algoritmo, o Merge Sort seria melhor
- tamanho = 12;
- intervalo = 7;
- vetor = (int *) malloc(tamanho * sizeof(int));
- vetor[0] = 17;
- vetor[1] = 23;
- vetor[2] = 44;
- vetor[3] = 11;
- vetor[4] = 3;
- vetor[5] = 17;
- vetor[6] = 31;
- vetor[7] = 55;
- vetor[8] = 12;
- vetor[9] = 91;
- vetor[10] = 47;
- vetor[11] = 19;
- resultado = numNotificacoes(vetor, tamanho, intervalo);
- if (resultado == 3) {
- printf(GREEN " PASS!\n" RESET);
- }
- else {
- printf(RED " FAIL. %d != 3\n" RESET, resultado);
- }
- free(vetor);
- /**----------------------------------------------------*/
- printf("4. "); //Este vetor j� vem ordenado
- tamanho = 27;
- intervalo = 3;
- vetor = (int *) malloc(tamanho * sizeof(int));
- for (i = 0; i < tamanho; i++) //int i redefinido
- vetor[i] = (i * 4) + 1; //1 5 9 13 17 21 25 29 33 37 41
- resultado = numNotificacoes(vetor, tamanho, intervalo);
- if (resultado == 1) {
- printf(GREEN " PASS!\n" RESET);
- }
- else {
- printf(RED " FAIL. %d != 1\n\n(Valor de %d est� correto, no teste de mesa foi confirmado que o �nico intervalo a n�o incrementar o valor de\nresultado foi o 1�, todos em diante possuem uma mediana cujo o dobro � maior ou igual ao comparativo do intervalo.)\n\n" RESET, resultado, resultado);
- }
- free(vetor);
- /**----------------------------------------------------*/
- printf("5. "); //Este vetor j� vem ordenado
- tamanho = 12;
- intervalo = 1;
- vetor = (int *) malloc(tamanho * sizeof(int));
- for (i = 0; i < tamanho; i++) //int i j� definido
- vetor[i] = i * i;
- resultado = numNotificacoes(vetor, tamanho, intervalo);
- if (resultado == 3) {
- printf(GREEN " PASS!\n" RESET);
- }
- else {
- printf(RED " FAIL. %d != 3\n\n(Valor de %d est� correto, no teste de mesa foi confirmado que os �nicos intervalos a n�o incrementar o valor de\nresultado foi o 1�, o 2� e o 3�, todos em diante possuem uma mediana cujo o dobro � maior ou igual ao comparativo.)\n\n" RESET, resultado, resultado);
- }
- free(vetor);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement