lordbr Posted November 28, 2011 Report Share Posted November 28, 2011 (edited) 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 November 28, 2011 by lordbr Quote Link to comment Share on other sites More sharing options...
0 Sunder Posted November 28, 2011 Report Share Posted November 28, 2011 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!! Quote Link to comment Share on other sites More sharing options...
0 mJi Posted November 29, 2011 Report Share Posted November 29, 2011 Dei uma olhada bem por cima...Na função tipoB(), isso aquin == 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. Quote Link to comment Share on other sites More sharing options...
Question
lordbr
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:
Enfim, obrigado pela atenção e caso alguém possa me ajudar eu agradeço.
Edited by lordbrLink to comment
Share on other sites
2 answers to this question
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.