Wochentage / Array / Ausgabe



  • Das Gleichheitszeichen ist überflüssig.



  • Wie wärs mit

    enum arrweekdays {Sunday, Monday, Thusday, Wednesday, Thursday, Friday, Saturday};
    

    ohne

    =
    

    . Dann gehts!

    Kann man sonst noch helfen? Scheinst ja noch nicht so ganz sattelfest zu sein,

    lg herbert



  • Merci, klar, jetzt seh ich es auch,

    zu Herbert:

    Ja, bin noch nicht so gut... aber ich lerne es schon.

    Ja, hilfe könnte ich noch in zwei sachen gebrauchen:

    1. Wenn ich nun dieses enum ding habe, also

    enum arrweekdays {Sunday, Monday, Thusday, Wednesday, Thursday, Friday, Saturday};
    

    und eine zahl zwischen 0-6 in einem int, zbsp. c=5.

    Wie bringe ich nun das programm dazu, das es Friday ausspuckt.

    Habe es mal mit einer for-Schlaufe und if versucht, aber der vergleich klappt nicht...

    2. Wenn ich nun habe

    int month
     std::cout << "The number of your month? ";
        std::cin >> month;
        } while (month <=0 || month >=13);
    

    dann wird ja dem month eine zahl zwischen 1 und 12 zugewiesen, wie bringe ich nun mein programm dazu, dass es z.bsp. dem januar (month ist also eins) eine 0 zuzuweisen (also eigtl 0=1), dem februar (month ist in demfall 2) eine 3 etc.

    zudem möchte ich ja später auf diese zahlen zurückgreifen, also wenn vom input kam 4 (April) soll dem April eine 6 zugewiesen werden, welche ich dann benutzen kann.

    Geht das auch mit enum?

    Lg Frauke



  • Ich glaube du suchst doch eher ein Array.

    char* weekdays[7] = { "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday" };
    
    for(int i = 0; i < 7; ++i)
    {
        std::cout << weekdays[i] << std::endl;
    }
    


  • Ja, aber mit array habe ichs auch schon versucht, aber das funktioniert eben auch nicht... hier gibt es gar keinen output, im fall unten möchte ich ja als output "Tuesday"...

    #include <iostream>
    int main ()
    {
    
    char* weekdays[7] = { "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday" }; 
     int c = 2;
    for(int i = 0; i < 7; ++i) 
       {
         if (c == *weekdays[i]) 
        std::cout << weekdays[i] << " ";
    
       }
     return 0;
    }
    

    Ist das denn wirklich so schwer?

    😞



  • #include <iostream>
    int main ()
    {
        const char* weekdays[] = { "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday" };
    
        unsigned int sel(0);
        std::cin >> sel;
        if (sel < 12) std::cout << weekdays[sel - 1] << std::endl;
    }
    

    Arrays ist der richtige Weg. Durch die Indexierung hast du eh eine feste ID einem Wert zugewiesen.



  • Hey D(Evil) Danke vielmals, das geht ja so wirklich...

    jetzt fehlt mir nur noch das mit den Monaten und der zahlenzuweisung, ob ich das noch hinbringe?

    Frauke



  • Wie? Also von Monatsnahmen zu Zahl?

    unsigned char get_month(const char* str_month)
    {
        const char* month[] = { "January", "February", ..., "December" };
        for (unsigned char i(0); i < 12; ++i)
            if (std::strcmp(month[i], str_month) == 0)
                return ++i;
        return 13;
    }
    

    ... wenn die Funktion dann 13 zurück gibt, war es wohl kein gültiger Monat 😛 Ansonsten gibt die bei "December" z.B. 12 zurück.

    std::strcmp
    Header: <cstring>
    Funktionskopf:

    int strcmp( const char *str1, const char *str2 );
    

    Aufgabe: Vergleich zweier char-Arrays auf Äquivalenz.

    unsigned char
    POD 8 Bit
    Wertebereich:

    assert(std::numeric_limits<unsigned char>::max() == 255);
    

    => 0 ... 255



  • Nein ich meinte nicht das, sondern, dass

    Dem Januar 0 zugewiesen wird
    Feb 3
    März 3
    April 6
    Mai 1
    Juni 4
    Juli 6
    August 2
    Sept 6
    Okt 0
    Nov 3
    Dez 5, wobei der jeweilige monat von std::cin >> month; kommt als month, also eine zahl ist, wobei month=1 (= Januar) ... month = 12 (Dezember)

    habs jetzt wie folgt gemacht, da ich month_value später wieder brauche...

    // Monatszuweisung
        if (month ==1) 
             month_value =0;
           else if (month ==2 || month==3 || month==11) 
             month_value = 3;
           else if (month ==4 || month==7) 
             month_value =6;
           else if (month ==5 ) 
             month_value =1;
           else if (month ==6) 
             month_value =4;
           else if (month ==8) 
             month_value =2;
           else if (month==8)
             month_value = 2;
           else if (month==9 || month==12)
             month_value = 5;
           else if (month==10)
             month_value = 0;
    

    umständlich, das prog funktioniert...



  • const char* arr_month[] = { "January", "February", ..., "December" };
    unsigned char month_value[12] = {0, 3, 3 ,6, 1, 4, 6, 2, 6, 0, 3, 5 };
    
    std::cout << "Wert " << 1 + 1 /* 0 indexiert */ << " ist der Monat " << arr_month[month_value[1]] << "zugewiesen!" << std::endl;
    

    oder was willst du haben? 😛



  • Also, soweit ich das sehe, hab ich ihn fertig...

    muss als nächstes dann die bestimmten funktionen auslagern damit es nicht mehr so "lastig ist".

    Ich will ja für ein gegebenes datum den wochentag berechnen, mit dem untenstehenden code geht es. Jetzt siehst du wohl auch (D)Evil für was ich das month und month_value zeugs brauche. Da ich mit arrays und pointer noch nicht so sattelfest bin, weiss ich eben nicht, wie ich dann genau denn monat weiter unten wieder einbau, der als input kam...

    #include <iostream>
    
    int main()
    {   int month;  
        int day;
        int year;
    
        std::cout << "The number of your day in month? ";
        std::cin >> day;
        do{
        std::cout << "The number of your month? ";
        std::cin >> month;
        } while (month <=0 || month >=13);
        do{   
        std::cout << "The number of the year (>= 1900)? ";
        std::cin >> year;   
        } while (year <1900);    
    
        // Berechnung der legalen Tage    
           if (month == 2){
    
           bool is_leap_year = ((year % 4 == 0 && year % 100 != 0)  || year % 400 == 0);  
           if (is_leap_year == true){
                if (day <1 || day >= 30)
                   std::cout << "Your date is not correct.";
                              }      
           else {     
                if (day <1 || day >= 29)
                    std::cout << "Your date is not correct";
                        	     }
             }   
                 // Monate mit 31 Tagen
                 if (month != 4 &&  month != 6 && month != 9 && month !=11 && month !=2){
    	         if (day <1 || day >= 32) 
                         std::cout << "Your date is not correct";
                     		     }
                 // Monate mit 30 Tagen
                 if (month == 4 ||  month == 6 || month == 9 || month ==11){
    	         if (day <1 || day >= 31) 
                         std::cout << "Your date is not correct";
    
    	     }        
    
      // Computation
    
         int HH = year/100;
         int YY = year%100;
         int DD = day;
         int  month_value;
         int corrigendum;
         int leap_year_corr=0;
    
         // month assignement
          if (month ==1) 
             month_value =0;
           else if (month ==2 || month==3 || month==11) 
             month_value = 3;
           else if (month ==4 || month==7) 
             month_value =6;
           else if (month ==5 ) 
             month_value =1;
           else if (month ==6) 
             month_value =4;
           else if (month ==8) 
             month_value =2;
           else if (month==8)
             month_value = 2;
           else if (month==9 || month==12)
             month_value = 5;
           else if (month==10)
             month_value = 0;
    
        // correction
    
           if (HH%4==1)
              corrigendum=4;
           else if (HH%4==2)
    	  corrigendum=2;
           else if (HH%4==3)
    	  corrigendum=0;    
            else if (HH%4==0)
    	  corrigendum=6;
    
        // Spec. correction
    
         if (month == 2 && day == 29){
    	    bool is_leap_year = ((year % 4 == 0 && year % 100 != 0)  || year % 400 == 0);  
              if (is_leap_year == true){
    	      (leap_year_corr)++;
                              } 
         }
    
         int  year_value = (YY+(YY/4))%7;	     
         int week_day= year_value+month_value + DD + corrigendum - leap_year_corr; 
         week_day=week_day%7;
    
         // Output
       const char* entire_days[] = { "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday" }; 
    
       if (week_day < 12)
       std::cout << "Your given date has been evaluated as a " << entire_days[week_day] << ". "; 
    
       return 0;
    }
    

Anmelden zum Antworten