Mediana liczb

0

Mam problem z programem który liczyłby medianę z n-elementowej tablicy
otóż wiem że w pierwszej kolejności program powinien posortować liczby od najmneijszej do najwiekszej a pozniej policzyć medianę ((n+1)/2 element dla nieparzystej liczby elementow i srednia dwoch srodkowych w przypadku parzystej liczby)

i tu moję pytanie brzmi jak mogę zrobić aby najpierw posortować a następnie te posortowane liczby wykorzystać w kolejnej funkcji?

0

Ja bym skorzystał z funkcji qsort - http://cplusplus.com/reference/cstdlib/qsort/?kw=qsort żeby posortować tablicę. U dołu podanej strony masz przykład, myślę, że analogicznie do niego będziesz w stanie użyć posortowanej tablicy w kolejnej funkcji.

0

mam taki kod:#include <stdio.h>

#include <stdlib.h>
#include <conio.h>

const int n=5;
int bs(int n,int t[]){
int i,k,tmp;
do{k=0;
for (i=0;i<n-1;i++)
if(t[i]>t[i+1]){
    tmp=t[i];
    t[i]=t[i+1];
    t[i]=tmp;
    k=1;}
}while(k==1) ;

}
int med(int n, int t[]){

    int x=0;

    if(n%2==0){

        x=(t[(n-1)/2]+t[n/2])/2 ;
        return x ;
}
    else
    x=(t[(n-1)/2]+t[(n+1)]/2)/2 ;

}
int main(void){

    int a[n]={11,44,3,4,5};
    bs(n,a);
    int x=med(n,a);
    printf ("%d",x);
    getche ();
    return 0;

mógłby go ktoś poprawić aby działał poprawnie?

1

Wklejam ten sam kod... Bo od tamtego mnie oczy bolały.


#include <stdlib.h>
#include <conio.h>

const int n=5;
int bs(int n, int t[])
{
     int i, k, tmp;
     do{
          k=0;
          for (i=0; i<n-1; i++)
          if(t[i]>t[i+1])
          {
               tmp=t[i];
               t[i]=t[i+1];
               t[i]=tmp;
               k=1;
          }
    }while(k==1) ;
}
//=============================
int med(int n, int t[])
{
        int x=0;
        if(n%2==0)
        {
               x=(t[(n-1)/2] + t[n/2] ) /2 ;
               return x ;
        }
        else
         x=(t[(n-1)/2] + t[(n+1)]/2) /2 ;
}
int main(void)
{
        int a[n]={11,44,3,4,5};
        bs(n,a);
        int x=med(n,a);
        printf ("%d",x);
        getche ();
        return 0;

Dlaczego twoje funckje med() i bs() nic nie zwracają??
Dlaczego w funkcji bs() podpisujesz nazwy zmiennych jednoliterowo? (i, k, n, x, a) Podpisz je właściwie do tego do czego sa przeznaczone.
Jak to zrobisz wklej kod jeszcze raz.

0

Powyższy post bez sensu

Jak to funkcje nic nie zwracają ??? funkcja med zwraca x, natomiast w bs faktycznie jest blad powinno być void gdyz funkcja nie zwraca zadnych wartosc, a podpisywanie zmiennych literami jest jak najbardziej poprawne

0

W takim razie pokaż mi, gdzie w kodzie widzisz "return x;" ?? Bo ja tego za cholerę nie widzę. I moje formatowanie kodu ma sens...

Edit:


int x=0;
        if(n%2==0)
        {
               x=(t[(n-1)/2] + t[n/2] ) /2 ;
               return x ; // tu jest
        }
        else
         x=(t[(n-1)/2] + t[(n+1)]/2) /2 ;
         //tu nie ma

Wybacz, dla warunku rownego true jest return, lecz dla wartości równej false returna nie ma i zwracana jest losowa wartość. A akurat w Twoim przypadku n jest równe 5, a liczba 5 nie jest podzielna przez 2. Stąd wniosek, że x nie zostanie zwrócony :)

Edit2:
Nie wiem czy mam rację, ale czy nie powinno tu

 int bs(int n,int t[])

byc tak? int bs(int n,int *t)



Edit3:

> Ale tu wszystko jasno ze wszystkiego wynika... nie musze dodawać chyba że i jest iteratorem itp.

pytanie: m s. J m, ż t j j b.
Rozszyfruj w takim razie to.
odpowiedź: mylisz się. Ja myslę, że tu jest jakis błąd.
A teraz pomysl, że te wyrazy sa jeszcze porozrzucane. Ja oczywiście wiem, co napisałem, ale ty byś za cholerę nie odgadł.

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