Jak zrobić z tego co tu mam funkcję w języku #C

0

Mam tablicę i wszystko co się z nią dzieję jest w Main. Ja chciabym zawrzeć funkcję na pokazywanie minimalnej i maksymalnej wartości w osobnej funkcji. Jest ktos to umiałby mi powiedzieć jak mam to zrobić? :

 #include <stdio.h>
#include <stdlib.h>
#include <math.h>
#define m 10
#include <time.h>
int losuj()
{
    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;
}


int main()
{
    srand(time(NULL)) ;
    int tab [m];
    double k ;
    int i ;
    int min , max ;
    double q , s ;
    for(i=0; i<m; i++)
    {
        tab[i]=losuj() ;
        printf ("Element numer %d = %d\n", i+1, tab[i]);

    }

    printf("Suma wszystkich elementow tablicy wynosi %d.\n", SumujTab(tab));
    k=1.*SumujTab(tab)/m;
    printf("Srednia wszystkich elementow tablicy wynosi %f.\n",k );
    for(i=0; i<m; i++)
    {
        q += (tab[i]-k)*(tab[i]-k);
    }
    s = sqrt(q /m);
    printf("Odchylenie standardowe wynosi %lf \n", s);
    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;
}

2

#C? Co to za wynalazek? Przedstawiłeś kod w C, więc zakładam, że chodzi o C.

Musisz napisać funkcję, która dostanie wskaźnik na dane, informację o ich ilości i zwróci maksymalną/minimalną wartość. Jeśli któreś z tych pojęć są niezrozumiałe to polecam początek dowolnego kursu C.

0

poprawisz mnie?

int minimum(int tab[i], m)
{
int min ;
min=tab[0];
for(i=0; i<m; i++){
if (tab[i]<min) min=tab[i];
return min ; }
2

Pomijając fatalne formatowanie (polecam http://format.krzaq.cc jak sam nie umiesz) jest prawie dobrze;

tab przekazuj jako wskaźnik do pierwszego elementu (a więc int minimum(int* tab, int m)), a i trzymaj wewnątrz funkcji.

0

Działa, ale dziwne bo pokazuje zawsze wartość o jeden większą

int minimum(int tab[])
{int i;
    int min ;
    min=tab[0];
    for(i=0; i<m; i++)
    {
        if (tab[i]<min) min=tab[i];
        return min ;
    }
}
2

Ach, przez złe formatowanie nie dojrzałem błędu. Pierw musisz przelecieć po wszystkich elementach tablicy, a dopiero potem zwrócić wartość. Ty w pętli po pierwszym porównaniu zwracasz najmniejszą wartość z pierwszych dwóch.

0

Dobra, mam już. Chciałem jeszcze posortować przez wybieranie, ale jakiś błąd mi ciągle wyskakuje:

int Sortowanie(int tab[])
{
    int i;
    int t;
    for (i = 0; i < m; i++) {
        int max = maximum(tab);
        if (max != i - 1)
            swap(tab[i - 1], tab[max]);
    }
}
2

A gdzie przekazujesz m?

0

czyli muszę dodać:

int Sortowanie(int tab[], m)
{
    int i;
    int t;
    for (i = 0; i < m; i++) {
        int max = maximum(tab);
        if (max != i - 1)
            swap(tab[i - 1], tab[max]);
    }
}
0

dalej błędy wyskakuą

2

Nie podałeś typu m, nie przekazałeś m do funkcji znajdującej maksimum.

0

Wydaje mi się, że jak mam na początku zdefiniowane m to nie muszę. W innych funkcjach nie musiałem podawać m

2

Jeśli m jest zmienną globalną to technicznie rzecz biorąc masz rację, ale jednocześnie popełniasz błąd używając zmiennych globalnych. To zła praktyka.

0

Na zajęciach mnie do tego zmuszają. Swoją drogą co tu mam źle, bo już mi ręce opadają.

2

No to już zostaw to globalne m. W takim razie w żadnej funkcji nie musisz go przekazywać/pobierać.

0

Wszystko pięknie działa oprócz tego sortownia przez wybieranie. Jakiś błąd ciągle się pojawia

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