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