Jump to content
Fórum Script Brasil
  • 0

Problemas com programa de estatística


lordbr

Question

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.

Edited by lordbr
Link to comment
Share on other sites

2 answers to this question

Recommended Posts

  • 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 to comment
Share on other 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 to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



  • Forum Statistics

    • Total Topics
      152.2k
    • Total Posts
      652k
×
×
  • Create New...