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

Odpowiedz Nowy wątek
2016-04-09 11:45
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;
}

Pozostało 580 znaków

2016-04-09 12:00
Swoj chop
...
#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.

Pozostało 580 znaków

2016-04-09 12:49
0

super ,dzięki!

@Swoj chop bzdury ci naopowiadał. - _13th_Dragon 2016-04-09 13:34

Pozostało 580 znaków

2016-04-09 13:34
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.

```c
#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


Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.

Pozostało 580 znaków

2016-04-10 16:22
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 ;
}

Pozostało 580 znaków

2016-04-10 18:12
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!

Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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