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; }