Największy/najmniejszy element w tablicy

0

Zadanie polega na znalezieniu indeksów najmniejszej i największej liczby w tablicy typu double spośród wylosowanych, a następnie zamianie miejscami liczby największej z liczbą najmniejszą.
Wypis pomijamy, bo on akurat działa. Na int'ach mam warunek na mniejsze/większe (A[i] < MIN/A[i] > MAX) i działa perfect. Z góry mówię, że dopiero zaczynam i nie rozumiem jeszcze o co chodzi dokładnie. Byłbym wdzięczny jakby ktoś wytłumaczył porównywanie liczb zmiennoprzecinkowych. Szukałem informacji po innych forach i w google i na nic, co by zadziałało, nie natrafiłem.

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <math.h>

int main(){

  double A[10], a = -100.0, b = 100.0, k, MIN = 1000.0, MAX = -1000.0, EPS = 1e-15;
  int min=0, max=0;
  time_t czas;
  
  srand( (unsigned int)time(&czas));
  //to działa ok
  for(int i=0; i<10; i++){
    A[i] = a + ((double)rand()/RAND_MAX)*(b-a);
    printf("A[%d] = %6.2lf\n", i, A[i]);
  }
  
  printf("\n");
  //tutaj nie wiem jak porównać
  for(int i=0; i<10; i++){
    if(/*WARUNEK (?)*/){ MIN = A[i]; min = i; }
    if(/*WARUNEK (?)*/){ MAX = A[i]; max = i; }
  }
  //od tąd działa ok
  k = A[max];
  A[max] = A[min];
  A[min] = k;

  for(int i=0; i<10; i++){
    printf("A[%d] = %6.2lf\n", i, A[i]);
  }

  printf("\n MIN: %d [Index: %d], MAX: %d [Index: %d]", MIN, min, MAX, max);
  printf("\n");

  return 0;
}

0
  for(int i=0; i<10; i++){
    if(A[i] < MIN){ MIN = A[i]; min = i; }
    if(A[i] > MAX){ MAX = A[i]; max = i; }
  }

Tak samo jak dla intów ;)
MIN i MAX możesz chcieć zainicjalizować pierwszym elementem z tablicy, żeby nie ograniczać się do losowo wybranego zakresu jak <-1000, 1000>

Żaden epsilon nie jest ci potrzebny. Chyba, że chciał byś sprawdzić, czy liczba znajduje się w danym zakresie. Na przykład 0.3 + 0.6 będzie tylko przybliżeniem 0.9, ale 0.3 jest zawsze mniejsze od 0.6

0
hit02 napisał(a):
  for(int i=0; i<10; i++){
    if(A[i] < MIN){ MIN = A[i]; min = i; }
    if(A[i] > MAX){ MAX = A[i]; max = i; }
  }

Tak samo jak dla intów ;)
MIN i MAX możesz chcieć zainicjalizować pierwszym elementem z tablicy, żeby nie ograniczać się do losowo wybranego zakresu jak <-1000, 1000>

Dzięki za odp.
MIN i MAX zainicjalizowałem w tym podejściu +/- 1000.0.
I właśnie te warunki nie działają. Chyba, że po prostu schrzaniłem z jakiegoś powodu to, jak wygląda output i po prostu nie widzę swojej głupoty.
Output:

A[0] = -72.36
A[1] =  24.33
A[2] = -31.12
A[3] =  44.09
A[4] =  28.06
A[5] = -77.96
A[6] =  93.66
A[7] = -62.42
A[8] =  84.00
A[9] =  13.15

A[0] = -72.36
A[1] =  24.33
A[2] = -31.12
A[3] =  44.09
A[4] =  28.06
A[5] =  93.66
A[6] = -77.96
A[7] = -62.42
A[8] =  84.00
A[9] =  13.15

 MIN: 5 [Index: 6], MAX: 5 [Index: 6]

//EDIT: co ciekawe, znajduje indexy i zamienia właściwe elementy, ale nie wiem czemu jak ma wypisać MIN/MAX i ich indexy to się sypie.

0

Z tego co widzę, to przy wyświetlaniu pomyliłeś formaty. zamiast %d użyj %lf

printf("\n MIN: %lf [Index: %d], MAX: %lf [Index: %d]", MIN, min, MAX, max);

Daj znać, jeśli dalej jest problem

1
hit02 napisał(a):

Z tego co widzę, to przy wyświetlaniu pomyliłeś formaty. zamiast %d użyj %lf

printf("\n MIN: %lf [Index: %d], MAX: %lf [Index: %d]", MIN, min, MAX, max);

Daj znać, jeśli dalej jest problem

O żesz. Faktycznie. Ale ze mnie debil. Cóż, od int'ów się zaczynało i widocznie się człowiek za bardzo przyzwyczaił.
Dzięki piękne. Wszystko działa.

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