![]() |
schaltjahr oder nicht-schaltjahr?
hi,
da man bei uns in der schule nix lernt (lehrer is kagge) hab ich jetzt mal angefangen mir c++ selber beizubringen.. und zwar versuch ich grad ein programm zu schreiben, bei dem man zwei daten eingibt, und das prog berechnet die anzahl der tage die zwischen den zwei daten liegen. jetzt muss ich nur noch wissen wie ich dem programm beibringe die schaltjahre zu berücksichtigen... bisher schauts so aus: Code:
case 02: thx, suka |
sollt funktionieren.
bool istSchaltjahr(int jahr) { bool schaltjahr=false; if(jahr%4==0) { schaltjahr=true; if(jahr%100==0) { schaltjahr=false; if(jahr%400==0) { schaltjahr=true; }; }; }; return schaltjahr; } |
hab noch eine elegantere version gefunden
bool istSchaltjahr(int jahr) { if(jahr%400==0) return true; if(jahr%100==0) return false; if(jahr% 4==0) return true; return false; }; |
² irrsinn
ich möchte diesen thread missbrauchen um dich was zu fragen (sei mir nicht böse suka) ich möchte den user des programms einen pfad mit dateinamen und dateierweiterung eingeben lassen und das programm erstellt in diesem pfad eine datei mit angegebenen namen und angegebener dateierweiterung, bei mir schauts so aus: printf("Geben Sie Pfad und Dateinamen an: "); scanf("%d",& path); konto=fopen(path,"w"); //"konto" is der filepointer die ganze sache funzt nur leider nicht... er erstellt mir im verzeichnis der exe, die das programm is eine datei, die path heißt... ohne dateierweiterung ! angeblich sollts so funzen, nur tuts halt nicht... PS: das programm is nur vorläufig noch im CL-interface ;) PS2: wo find ichn ein bissal infos über boolsche operatoren? |
werd mir schnell ein derartiges programm
schreiben. kann dir allerdings nichts garantieren, weil ich mit linux unterwegs bin. trau mir über das andere betriebssystem nichts genaues sagen. in fehler ist mir allerdings sofort aufgefallen. vielleicht ists aber auch nur ein tippfehler von dir: wenn du einen string einlesen willst, muss es scanf("%s" &irgendwas); heißen. außerdem solltest du file streams immer mit fclose(stream) schließen. |
das ich die file schließe is klar, hab ich da nur nicht hingeschrieben, fehlt ja sonst noch ne menge, oder ? ;)
ich habs bewusst als integer eingelesen, sollt/muss ich nen string verwenden? hast du ICQ/MSN? ICQ: 121 65 35 39 MSN: redspitfireflame@hotmail.com wäre dir sehr verbunden :) |
Kann Dir leider nicht helfen. Bin aber 29.2.1960 geboren
|
einen string als zahl einzulesen hat meiner meinung nach nicht viel sinn. möglicherweise gibts aber auch so ein verfahren. bin ja nicht allwissend.
was verwendest du sonst für bibliotheken? und vor allem welches betriebssystem? such einfach nach einem howto. müssts im internet genug geben. konkretes zum thema boolesche operatoren fallt mir auf die schnelle nicht ein. |
Zitat:
ich verwende standardbibliotheken... stdio.h, conio.h, sting.h, für diese spielereien auch windows.h usw. noch was... könntest du mir sagen, welche returnwerte die buttons ok, cancel, yes, no, ignore usw. haben? wenn ich eine messangebox verwende, die niemandem eine fehlermeldung vormachen soll, dann bräucht ich das schon ;) habs mal mit den returnwerten probiert, die in der MSDN-library unter msgbox stehen, gehen aber nicht ! |
kurze klarstellung: wenn du einen dateinamen mit pfad und dateierweiterung einlessen willst, ist das mit sicherheit keine zahl sondern ein string. also unter c, wenn du so willst ein feld mit unsigned shorts. unter c++ gibts in der mfc die klasse cstring. is im großen und ganzen auch bequem zu verwenden.
zu den return werten weiß ich nur, dass die in der mfc angegebenen stimmen. hab ich in der arbeit schon öfters verwendet. du musst allerdings aufpassen, dass du die richtigen returns zur richtigen dialogbox verwendest. meines wissens nach gibts davon mehrere in der mfc. |
grad hab ich gesehn... ich hab den pfad sowieso als string eingelesen, sollte eigentlich kein problem sein, ises aber !
Hier ist der ganze Teil: printf("Hier koennen Sie einen Kontoauszug drucken.\nGeben Sie den Pfad an, in dem der Kontoauszug\ngespeichert werden soll(z.B. C://...+ auszug.txt): "); scanf("%s",& k.path); konto=fopen(k.path,"r"); fscanf(konto, "%lf",& k.kost); fclose(konto); auszug=fopen("k.path","w"); fprintf(auszug,"Ihr Kontostand betraegt: %lf Euro",k.kost); fclose(auszug); printf("Ihr Kontoauszug wurde erfolgreich erstellt !"); Sleep(2000);break; kanns daran liegen, dass alle deklarationen in einer struktur sind?? instanz ist natürlich vorhanden (k.path...) PS: das ganze soll ein Bankomat sein :lol: |
das darf nichts ausmachen, ob die variablen in einer struktur sind oder nicht. du hast bei auszug=fopen("k.path") als string drinnen stehn. kein wunder, dass er dir eine datei mit namen k.path im aktuellen verzeichnis anlegt. nimm einfach die anführungszeichen weg. dann sollts funktionieren
|
jetz gehts auf einmal...
dabei hab ich das schon vorher mal umgeändert, da ises nciht gegangen ! trotzdem danke !! hast du jetz ICQ/MSN? will mich ja nicht aufdrängen, is ein angebot :) |
thx! stimmt das so? (ich frag nur weil ich sowas komplexes noch nie gsehn hab :eek:)
Code:
case 02: |
schaut vernünftig aus
|
tschuldige. stimmt leider doch nicht.
wenn du die funktion istSchaltjahr definierst, brauchst du nachher ind er if abfrage nur mehr zu schreiben: if (istSchaltjahr(irgendeine variable)) { max_tage=29; } else { max_tage=28; } die funktion istSchaltjahr sollte so ausschaun: bool istSchaltjahr(int jahr) { bool schaltjahr=false; if(jahr%4==0) { schaltjahr=true; if(jahr%100==0) { schaltjahr=false; if(jahr%400==0) { schaltjahr=true; }; }; }; return schaltjahr; } wobei du in ansi c keinen datentyp bool hast. du kannst aber ohne probleme unsigned short verwenden, oder dir einen bool typ erzeugen. wen du unsigned shorts verwendest, musst du statt true und false 1 und 0 schreiben. es sei denn du hast das irgendwo als define stehn. jetzt sollts aber wirklich funktionieren |
ein schaltjahr iss durch 4 teilbar, also was hat der code bitte für einen sinn:
if(jahr%400==0) return true; if(jahr%100==0) return false; if(jahr% 4==0) return true; return false; es reicht doch, wenn du nur folgendes stattdessen schreibst: if(jahr% 4==0) return true; return false; oder hab ich da etwas missverstanden? |
da hast leider was mißverstanden, weil alle 100 jahre kein schaltjahr, alle 400 jahre aber doch wieder ein schalt jahr ist. klingt komisch - is aber so
|
was echt? mein allgemeinwissen lässt anscheinend wirklich zu wünschen übrig...g*...hab auch einen link gefunden mit den hintergründen des schaltjahres inkl. VB-Code....http://vb-tec.de/schltjhr.htm
|
Zitat:
char irgendwas[200]; scanf("%s", irgendwas); Ein String ist ein (char *) bzw. (char []) und gilt bereits als Adresse. |
du hast natürlich recht. man kann den & operator auch weglassen. funktioniert aber mit genau so.
|
Alle Zeitangaben in WEZ +2. Es ist jetzt 13:13 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
© 2009 FSL Verlag