Pytanie do kodu?

0

Mam taki kod:

#include <iostream>
using namespace std;

enum daysOfWeek
{
    poniedzialek=-1,
    wtorek=-10,
    sroda=-5,
    czwartek=0,
    piatek=2,
    sobota=4,
    niedziela=0
};
    
int max(enum daysOfWeek[])
{
    int max = daysOfWeek(0);
    
    for (int i=1; i<7; i++)
        if (max < daysOfWeek(i))
              max = daysOfWeek(i);
    
    return max;
}

int main()
{
    daysOfWeek arr[] = {poniedzialek, wtorek, sroda, czwartek, piatek, sobota, niedziela};
    cout << "Maksymalna temeratura na nastepny tydzien bedzie wynosic " << max(arr);
    return 0;
}

Dlaczego na końcu wynikiem jest 6, a nie 4?

0

Rzecz pierwsza, to enum nie służy do takich rzeczy. Od tego są tablice. A poza tym, podstawy C++ się kłaniają - co to za konstrukcja: daysOfWeek(i)? Użyj operatora tablicowego [], a nie funkcji.

Mogłoby to tak wyglądać moim zdaniem:

int temperaturaMaksymalna(int temp[]) 
{
  int max = 0;
  for (int i = 0; i < 7; i++)
    if (temp[i] > max)
      max = temp[i];
  return max;
}

int main()
{
  int temperatury[] = {-1, -2, 0, 2, 1, 3, 2 };
  int tempMax = temperaturaMaksymalna(temperatury);
}

Enum służy do czego innego w ogóle, jak widać, w Twoim przypadku nie jest potrzebny :)

0

Ale to ma właśnie zadziałać przy wykorzystaniu typu wyliczeniowego. Zadanie brzmi: Zdefiniować typ wyliczeniowy zawierający dni tygodnia i napisać program zawierający przewidywaną temperaturę maxymalną na najbliższy tydzień.

0

No właśnie nie ma. Typ wyliczeniowy(enum) masz zdefiniować dla dni tygodnia i za pomocą tego typu napisać resztę funkcjonalności.
Enum służy tylko do tego, żeby kod był bardziej czytelny i prostszy w utrzymaniu.
Definiujesz enuma, tablicę(albo listę, czy słownik) dla temperatur i używając tego enuma i np. switch case prezentujesz dane.

0

Wow! Napisałem w pierwszym poście w typem wyliczeniowym i pytam tylko dlaczego ** 6, a nie 4?**?

0

Wypisz sobie co oznacza enum(i), a potem zadawaj głupawe pytania.

http://www.ideone.com/yBkzs

Poza tym, że pętlę indeksujesz od 1, a nie od 0, to masz poważny błąd - dwie stałe należące do jednego enuma nie mogą mieć tych samych wartości, bo to spowoduje niejednoznaczność. Switch wybierający z twojego enuma nawet się nie skompiluje. Tutaj prostszy przykład: http://www.ideone.com/GCQyQ

0
gubbi napisał(a)

Wow! Napisałem w pierwszym poście w typem wyliczeniowym i pytam tylko dlaczego ** 6, a nie 4?**?
Bo tyle wynosi maksymalna wartość zmiennej i. Jeżeli ktoś Ci pisze, że czegoś nie rozumiesz, to lepiej się nad tym zastanów. Szczególnie, że jesteś początkujący. Twój program nie ma kompletnie sensu.

0

Nota bene, ciekawie zachowuje się rzutowanie na enuma. Wartości całkowite pozostają bez zmian, a zmiennoprzecinkowe sami sprawdźcie.

#include <cstdlib>
#include <iostream>

int main() {

    enum mojEnum {
        a, b, c
    };
    u_int64_t l = 0x7ff0000000000000L;
    double d = *reinterpret_cast<double*>(&l);
    std::cout << double(d) << " " << mojEnum(d) << " " << int(d) << std::endl;

    return 0;
}

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