proszę o pomoc z kodem w C. Chodzi o tablicę:

0

Cześć wszytkim, na zajęciach mieliśmy napisać tablice, która:
a) znajduje wartość największą i najmniejszą,
b) oblicza średnią arytmetyczną,
c) oblicza standardowe odchylenie
Mimo, że jestem początkujacym, to udało mi się napisać caly kod, jednak nie program nie do końca robi to co w poleceniu: Po pierwsze w tablicy wyświetla jakieś dziwne wartości, chciałem, żeby każda kolejna wartość w tablicy to była losowa liczba od 0 do 9. Jest też problem z minimalną i maksymalną wartością:

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#define m 10
int losuj(int*t, int i)
{
    t[i]=rand()%m ;
    return t[i];
}
int SumujTab(int *t)
{
    int suma = 0;
    int i;
    for(i=0; i<m; i++)
        suma += *(t+i);
    return suma;
}
int odchylenie(int *t)
{
    int q = 0;
    int tab [m];
    int i ;
    int w=0;
    for(i=1; i<m; i++)
    {
        q += *(t+i);
        w = (q - SumujTab(tab))/m ;
    }
    return w ;
}
int main()
{
    int tab [m];
    int k ;
    int i ;
    int e ;
    int min ;
    int max ;
    for(i=1; i<m; i++)
        losuj(&tab[i], i);

    for (i=0; i<m; ++i)
    {


        printf ("Element numer %d = %d\n", i, tab[i]);

    }
    printf("Suma wszystkich elementow tablicy wynosi %d.\n", SumujTab(tab));
    k=SumujTab(tab)/m;
    printf("Srednia wszystkich elementów tablicy wynosi %d.\n",k );
    e=sqrt(odchylenie(tab));
    printf("Odchylenie standardowe wynosi %d \n", e);
    max=tab[0];
    min=tab[0];

    for(i=0; i<m; i++)
    {


        if(tab[i]>max) max=tab[i];
        if(tab[i]<min) min=tab[i];
        printf("max = %d",max);
        printf("\n");

        printf("min = %d",min);
        printf("\n");
    }
    return 0;
}
1
...
#include <time.h>
...
int losuj(int *t, int i) //i to nasze m
{
	srand(time(NULL));		//aby wartosci zawsze byly inne
	int j;
	for(j = 0;j<i;j++)
    		t[j]=rand()%i ;
}
...
    	double k ;					//srednia moze byc zmiennopozycyjna
...
	k=(double)SumujTab(tab)/m;	//aby nam nie obcinalo
	printf("Srednia wszystkich elementów tablicy wynosi %.2lf .\n",k );	//2 miejsca po przecinku
 

Pozostało Ci odchylenie standardowe.

0

super ,dzięki!

1
Swoj chop napisał(a):
...
#include <time.h>
...
int losuj(int *t, int i) //i to nasze m
{
	srand(time(NULL));		//aby wartosci zawsze byly inne
	int j;
	for(j = 0;j<i;j++)
    		t[j]=rand()%i ;
}
...
    	double k ;					//srednia moze byc zmiennopozycyjna
...
	k=(double)SumujTab(tab)/m;	//aby nam nie obcinalo
	printf("Srednia wszystkich elementów tablicy wynosi %.2lf .\n",k );	//2 miejsca po przecinku
 

Pozostało Ci odchylenie standardowe.

#include <stdio.h>
#include <time.h>

// Totalny bezsens, wkopiowane jak jest
int losuj(int *t, int i) //i to nasze m
{
    srand(time(NULL));        //aby wartosci zawsze byly inne, WŁAŚNIE NA ODWRÓT
    int j;
    for(j = 0;j<i;j++) // po kiego ci kopia tego j? WTF?
            t[j]=rand()%i ;
} // brak return mimo że zadeklarowano jako int

int main(void)
  {
   int A[5],B[5];
   int i;
   losuj(A,5);
   losuj(B,5);
   for(i=0;i<5;++i) printf("%2d",A[i]); 
   printf("\n");
   for(i=0;i<5;++i) printf("%2d",B[i]); 
   printf("\n");
   return 0;
  }

http://ideone.com/qunSZu

0

Okej, przekształciem trochę po swojemu, jest prawie dobrze, tylko: Nie wiem jak zrobić do odchylenie standardowe, wydaje mi się, że dobrze je napisałem i te wartości min i max :

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#define m 10
int losuj(int i)
{   int x;
	x=rand()%m ;
    return x;
}
int SumujTab(int *t)
{
    int suma = 0;
    int i;
    for(i=0; i<m; i++)
        suma += *(t+i);
    return suma;
}
double odchylenie(int *t)
{
    int q = 0;
    int tab [10];
    int i ;
    double w=0;
    for(i=0; i<m; i++)
    {
        q += *(t+i);
        w = (q - SumujTab(tab))/m ;
    }
    return w ;
}
int main()
{
    int tab [m];
    double k ;
    int i ;
    double e,g ;
    int min ;
    int max ;
    int x=1;
    for(i=0; i<m; i++){
        tab[i]=losuj(i) ;
        printf ("Element numer %d = %d\n", x, tab[i]);
        x=x+1;}


    printf("Suma wszystkich elementow tablicy wynosi %d.\n", SumujTab(tab));
    g=m;
    k=SumujTab(tab)/g;
    printf("Srednia wszystkich elementow tablicy wynosi %lf.\n",k );
    e=sqrt(odchylenie(tab));
    printf("Odchylenie standardowe wynosi %lf \n", e);
    max=tab[0];
    min=tab[0];
return 0 ;
}

1
  1. Zapoznaj się z pojęciem formatowania kodu: http://4programmers.net/Forum/998482 - wygląda jakby IDE próbowało formatować zaś ty nie poddajesz się i wciąż z tym walczysz.
  2. Zapoznaj się z inkrementacją, bo jej nie rozumiesz: http://4programmers.net/Forum/1101404
  3. Nie używaj innego niż angielskie nazewnictwa: http://4programmers.net/Forum/1208091
  4. Czemu sumujesz na każdym kroku pętli? Wyrażenie w = (q - SumujTab(tab))/m ; za każdym razem wywoła sumowanie
  5. Użyj srand(time(NULL)); na początku main, bo inaczej za każdym odpaleniem będziesz mieć dokładnie to samo.
  6. Po kiego ci parametr w funkcji int losuj(int i) ?
  7. Po kiego ci taka litania:
int losuj(int i)
{   int x;
    x=rand()%m ;
    return x;
}

skoro można zrobić:

int randmod(int below) { return rand()%below; }

Tak wg mnie to zupełnie tej funkcji nie potrzebujesz, zwyczajnie: tab[i]=rand()%m;
8. Po kiego masz ten int tab [10]; w odchylenie() i po kiego sumujesz to co tam siedzi (czyli śmieci)?
9. Weź może jakiś kurs przeczytaj!

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