Histogram [C]

0

Witajcie,
muszę napisać program, który uzupełni tablicę 100-elementową losowymi liczbami z niewiadomego przedziału (dodatnie i ujemne), później znajdzie wartość min i max oraz zliczyć ile razy każda wartość występuje - czyli histogram.
Na razie napisałam coś takiego, ale nie liczy poprawnie częstości. Pomocy!!

#define N 10
#define M 20
#define L 10
#include<time.h>
#include<stdio.h>

int main()
{ srand(time(NULL));
int a[N], k, i, min, max;
int suma=0;
int n[suma];

for(k=0; k<N; k++)
a[k]=rand()%(10+5+1)-5;
for(k=0; k<N; k++)
printf("%d\t", a[k]);

min = a[0];
max=a[0];

for (i=0; i<N; i++)
{
if(a[i]<min)
min=a[i];
if(a[i]>max)
max=a[i];
}

printf ("\nnajwieksza wartosc to: %d ", max);
printf ("\nnajmniejsza wartosc to: %d ", min);
if (min<0 && max<0)
suma=-min-max+1;
else if(min<0)
suma=-min+max+1;
else
suma=max-min+1;
printf ("\nrozpietosc histogramu to: %d", suma);
printf ("\nHistogram\nWartosci:");
for(i=min;i<=max;i++)
printf ("%d\t", i);
printf ("\nCzestosc: ");
for(i=min;i<suma;i++)
n[i]=0;
for (k=min; k<suma; k++)
{
for (i=0; i<N; i++)
if (a[i]==k)
n[k]++;}
for(k=min;k<suma;k++)
printf ("%d\t", n[k]);
return 0; }

0
  1. http://4programmers.net/Forum/998482
int suma=0;
int n[suma]; 

stworzyłeś tablicę zerowej długości, zmianą wartości zmiennej suma nie będzie wpływać na rozmiar tablicy.

0

poprawilysmy tablice n[suma]

#define N 10
#define M 20
#define L 10
#include<time.h>
#include<stdio.h>

int main()
{ srand(time(NULL));
int a[10], k, i, min, max, suma = 0;
for(k=0; k<10; k++)
a[k]=rand()%(10+5+1)-5;
for(k=0; k<N; k++)
printf("%d\t", a[k]);

min = a[0];
max=a[0];
for (i=0; i<10; i++)
{
	if(a[i]<min)
		min=a[i];
	if(a[i]>max)
		max=a[i];
}

printf ("\nnajwieksza wartosc to: %d ", max);
printf ("\nnajmniejsza wartosc to: %d ", min);
if (min<0 && max<0)
    suma=-min-max+1;
else if(min<0)
    suma=-min+max+1;
else
  suma=max-min+1;
  int n[suma];
printf ("\nrozpietosc histogramu to: %d", suma);
printf ("\nHistogram\nWartosci:");
for(i=min;i<=max;i++)
    printf ("%d\t", i);
printf ("\nCzestosc: ");
for(i=min;i<suma;i++)
    n[i]=0;
for (k=min; k<suma; k++)
{
    for (i=0; i<10; i++)
        if (a[i]==k)
        n[k]++;}
for(k=min;k<=suma;k++)
printf ("%d\t", n[k]);
return 0; }

ale dalej nie dziala.

  1. o co chodzi z tym formatowaniem???
0
#define N 10
#define M 20
#define L 10
#include<time.h>
#include<stdio.h>


int main()
{	srand(time(NULL));
	int a[10], k, i, min, max, suma = 0;
	for(k=0; k<10; k++)
		a[k]=rand()%(10+5+1)-5;
	for(k=0; k<N; k++)
		printf("%d\t", a[k]);

    min = a[0];
    max=a[0];
	for (i=0; i<10; i++)
	{
		if(a[i]<min)
			min=a[i];
		if(a[i]>max)
			max=a[i];
	}

	printf ("\nnajwieksza wartosc to: %d ", max);
    printf ("\nnajmniejsza wartosc to: %d ", min);
    if (min<0 && max<0)
        suma=-min-max+1;
    else if(min<0)
        suma=-min+max+1;
    else
      suma=max-min+1;
      int n[suma];
    printf ("\nrozpietosc histogramu to: %d", suma);
	printf ("\nHistogram\nWartosci:");
	for(i=min;i<=max;i++)
        printf ("%d\t", i);
    printf ("\nCzestosc: ");
    for(i=min;i<suma;i++)
        n[i]=0;
    for (k=min; k<suma; k++)
    {
        for (i=0; i<10; i++)
            if (a[i]==k)
            n[k]++;}
    for(k=min;k<=suma;k++)
    printf ("%d\t", n[k]);
    return 0; }

 
0
  1. Nazywaj zmienne sensownie, jak na razie nie widzę żadnej reguły w nazewnictwie.
  2. http://4programmers.net/Forum/1101404
  3. Raz pętle masz do 10 raz do N, jak tylko zmienisz N na coś innego niż 10 to całość się wysypie.
  4. if (min<0 && max<0) suma=-min-max+1; - czyli od min=-3 do max=-2 masz 6 wartości?
  5. for(i=min;i<suma;i++) n[i]=0; - a jak min jest ujemny to zaczniesz od ujemnego indeksu tablicy?
  6. Miał być histogram zaś wypisujesz: printf ("%d\t", n[k]); - liczby.
  7. Przeważnie przyjmuje się dla histogramów liczba przedziałów 1 + 3.3 log(N) czyli dla liczebności N=10 ma to być 4,3 więc zaokrąglamy do 4-ch

1 użytkowników online, w tym zalogowanych: 0, gości: 1