Ir para conteúdo
Fórum Script Brasil
  • 0

Problemas com programa de estatística


lordbr

Pergunta

Antes de tudo, boa tarde!

Estou desenvolvendo um projeto na matéria de estatística para minha faculdade e estou encotrando dificuldades com este script.

Até a linha 84 o programa estava funcionando perfeitamente, a partir dai começou a dar alguns problemas.

O programa compila normal, faz os passos até os intervalos, depois disso o programa fecha sozinho.

Abaixo segue o código:

#include <stdlib.h>
#include <stdio.h>
#include <math.h>
#include <conio.h>
#include <string.h>

void roll (float numeros[], int n) {
     int i,j;
     float temp;
     
     for(i=0; i<n; i++){ 
        for(j=i+1; j<n; j++){
           if(numeros[j]<numeros[i]){
              temp=numeros[i];
              numeros[i]=numeros[j];
              numeros[j]=temp;                                       
           }
     }
   }          
}

void tipoB () {
      int n,nn,cont=0;
      
      system("cls");
      
      printf("Digite a quantidade de elementos:\n\n>>");
      scanf("%i",&n);
      n == nn;
      
      float numeros[n];
      
      while (cont < n) {
            printf("\n\nDigite o numero desejado:\n\n>>");
            scanf("%f",&numeros[cont]);
            cont++;
            }
            
      system("cls");
      printf("Elaborando o roll...\n");
      _sleep(2000);      
      roll(numeros,n);
      
      printf("O roll ficou assim:\n\n");
      
      cont=0;
      while (cont < n) {
            printf("%2.2f ",numeros[cont]);
            cont++;
            }
      
      float intervalos,h;
      intervalos = log10(n)*3.3+1;
      h = (numeros[n-1] - numeros[0])/intervalos;
      
      int nc;
      float ncc;
      
      ncc = n / h;
      ceil(ncc);
      nc = ncc;
      
      float li[nc],ls[nc];
      
      li[0] = numeros[nn];
      ls[0] = numeros[nn] + h;
      
      
      cont = 1;
      
      while (cont < nc) {
            li[cont] = ls[cont-1];
            ls[cont] = li[cont] + h;
            cont++;
       }
            
            
      printf("\n\n%i\n\n",nc);      
            
      cont = 0;
      
      while (cont < nc) {
            printf("\n%2.2f -> %2.2f",li[cont],ls[cont]);
            cont++;
            }
      
      int fi[nc],i;
          
      cont = 0;
      
      while (cont < nc) {
            for (i=0;i<nn;i++) {
             if ((numeros[i] >= li[cont]) && (numeros[i] < ls[cont])) {
               fi[cont]++;
             }
           }
        cont++;
      }
      
      float totalfi=0;
      cont = 0;
      
      while (cont < nc) {
         totalfi = totalfi + fi[cont];
        cont++;
      }
      
      float fr[nc];
      
      cont = 0;
      
      while (cont < nc) {
            fr[cont] = fi[cont] / totalfi;
        cont++;
      }
      
      float frp[nc];
      
      cont = 0;
      
      while (cont < nc) {
         frp[cont] == fr[cont] * 100;
        cont++;
      }
      
      float fac[nc];
      
      cont = 1;
      fac[0] = fi[1];
      
      while (cont < nc) {
         fac[cont] = fac[cont-1] + fi[cont];
        cont++;
      }
      
      float facp[nc];
      
      cont = 0;
      
      while (cont < nc) {
            facp[cont] = fac[cont] * 100;
        cont++;
      }
      
      float fal[nc];
      
      fal[0] = 100;
      
      cont = 1;
      
      while (cont < nc) {
            fal[cont] = fal[cont-1] - fi[cont-1];
        cont++;
      }
      
      float falp[nc];
      
      cont = 0;
      
      while (cont < nc) {
            falp[cont] = fal[cont] * 100;
        cont++;
      }
      
    printf("\n\n-----------------------------------------------------------------\n");
    printf("   XI   |   FI   |  FR  |  FR%  |  FAC  |  FAC  |  FAL  |  FAL  \n"); 
    printf("-----------------------------------------------------------------\n");
    
    cont = 0;
    
    while (cont < nc) {
          printf ("%2.2f l-> %2.2f |  %2.2f  |  %2.2f  |  %2.2f  |  %2.2f  |  %2.2f  |  %2.2f  \n",li[cont],ls[cont],fi[cont],fr[cont],frp[cont],fac[cont],facp[cont],fal[cont],falp[cont]);
      cont++;
      }    
    
      
      system("pause");
}      
      
      
      
int main () {
    char escolha1;
    
    printf("1 - Tabela tipo B\n");
    printf("2 - Sair\n\n>> ");
    
    scanf("%c",&escolha1);
    
    if (escolha1 == '1') {
                tipoB();
                }
                else {
                     system("pause");
            }
    return 0;
}

Enfim, obrigado pela atenção e caso alguém possa me ajudar eu agradeço.

Editado por lordbr
Link para o comentário
Compartilhar em outros sites

2 respostass a esta questão

Posts Recomendados

  • 0

Olá, estou fazendo esse programa com o lordbr e estamos encontrando dificuldades, fiz alguns testes de mesa e percebi que o programa começa a travar no calculo do fac a partir destas linhas:

float fac[nc];

cont = 1;

fac[0] = fi[1];

O programa simplesmente trava e diz que necessita ser fechado.

Esperamos ansiosamente a ajuda de alguma alma generosa pois estamos chegando ao desespero, é um trabalho de uma matéria da nossa facul que deve ser entregue essa semana.

Muito obrigado pela atenção!!

Link para o comentário
Compartilhar em outros sites

  • 0

Dei uma olhada bem por cima...

Na função tipoB(), isso aqui

n == nn;
É uma comparação. Basicamente é uma operação lógica que retorna zero caso falsa, ou um valor diferente de zero caso verdadeira. Caso você queira atribuir o valor de 'nn' á 'n', o correto é usar apenas um sinal de igual:
n = nn;
No seu programa, isso também é incorreto, pois 'nn' não foi inicializado. Ainda:
float numeros[n];

Prefira usar alocação dinâmica. Foi-me dito que isto é incorreto. Pessoalmente nunca usei declarações dessa maneira.

E...

declare as variáveis no começo do programa (ou função). O ministério da interpretação de algoritmos recomenda.

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,4k
×
×
  • Criar Novo...