Tak na pierwszy rzut oka to nie mogłem wyłapać, ale w końcu się udało.
1. Linia 55 - do zmiennej m, której potem używasz do porównań, przypisujesz przypadkową wartość. Utworzona w linii 51 tablica nie jest zainicjalizowana żadnymi wartościami, a jest to zmienna lokalna, więc może być tam cokolwiek, choćby kosmicznie mała liczba, która w większości przypadków, może powodować daremne dalsze obliczenia. Przeniosłem utworzenie i inicjalizację tej zmiennej za pętlę, w której obliczane są wartości odchyleń od średniej, czyli wtedy przypisuje jej jakąś pewną wartość.
2. Pierwsza i trzecia pętla for. W pierwszej pętli przesuwasz wskaźnik na ostatni element tablicy. A następnie w trzeciej pętli odwołujesz się do wartości spoza tablicy, więc może być tam cokolwiek. W pierwszej pętli użyłem indeku tablicy, aby pobierać wartości z kolejnych pól tablicy, ale bez ruszania wskaźnika.
3. Linia 78 - używasz niezainicjalizowanej zmiennej y, czyli jak wcześnie może być tam cokolwiek. A druga sprawa, że pewnie w ferworze walki przypisujesz ją do kolejnych pól tablicy, a na koniec i tak zwracasz z funkcji tą niezainicjalizowaną zmienną y.
Ogólnie polecałbym, jak już używasz wskaźników w funkcjach, to po prostu w samej funkcji utworzyć sobie wskaźnik i przypisać do niego przekazany z programu głównego do funkcji adres i na nim działać, żeby nie ruszać tego "oryginalnego" wskaźnika. Wskaźniki ogólnie do podszlifowania jeszcze. Poniżej poprawiony kod Twojej funkcji i moja propozycja, krótszej wersji tej funkcji.
double najblizsza(double *podane, double sredniaa, int ile)
{
double odleglosc[ile];
double m;
int x;
double y;
for (int i=0; i<ile; i++)
{ odleglosc[i]= abs( *(podane+i)-sredniaa );
//podane++;
}
m= odleglosc[0];
for(int i=0; i<ile; i++)
{
if (odleglosc[i] < m )
{ m= odleglosc[i];
x=i;
}
}
for(int i=0; i<ile; i++)
{
if(i==x)
y= *podane;
podane++;
}
return y;
}
double najblizsza(double *podane, double sredniaa, int ile)
{
double odleglosc[ile];
double m;
int x=0;
for (int i=0; i<ile; i++)
{
odleglosc[i]= abs( *(podane+i)-sredniaa );
}
m= odleglosc[0];
for (int i=1;i<ile;i++)
{
if (odleglosc[i]<m)
{
m=odleglosc[i];
x=i;
}
}
return *(podane+x);
}