lordbr Postado Novembro 28, 2011 Denunciar Share Postado Novembro 28, 2011 (editado) 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 Novembro 28, 2011 por lordbr Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Sunder Postado Novembro 28, 2011 Denunciar Share Postado Novembro 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!! Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 mJi Postado Novembro 29, 2011 Denunciar Share Postado Novembro 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. Citar Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
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.
Editado por lordbrLink para o comentário
Compartilhar em outros sites
2 respostass a esta questão
Posts Recomendados
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.