abdelhalim
Goto Top

Frage Funktionen (Call by Value) in C plus plus

Hi Leute ich bin gerade dabei Funktionen (call by value) kennen zu lernen.
ich habe eine Frage die ich noch nicht lösen kann. Wollte mal fragen, ob jemand die Quellcode schreiben könnte und ich Ihn dann mal sehen könnte um ein besseres Verständnis zu bekommen.

Erstellen Sie eine C++ Funktion, mit der man ermitteln kann , ob ein Jahr ein Schaltjahr ist. Es gelten folgende Regeln:

Jahr, die nicht durch 4 ohne Rest teilbar sind , sind keine Schaltjahre.

Ein Jahr, das durch 4, durch 100 und durch 400 ohne Rest teilbar ist, ist ein Schaltjahr.

Ein Jahr, das durch 4 und 100 (und nicht durch 400) ohne Rest teilbar ist, ist kein Schaltjahr.

Ein Jahr, das durch 4 (und nicht durch 100) ohne Rest teilbar ist, ist ein Schaltjahr.

Der Übergabeparameter für die Funktion ist das Jahr (Datentyp:int). Die Funktion sollen an das aufrufende Programm die Anzahl der Tage des Monats Februar zurückgeben, d.h. bei einem Schaltjahr 29 Tage ansonsten 28 Tage.

Puhh das wars.


Wenn einer eine Lösung könnte er diese bitte senden.


Danke.


Ps. Ist es tichtig das Call-By-Value (eine Kopie der Daten übergibt) und Call-By-Reference die original Datei übergibt???

Content-Key: 44545

Url: https://administrator.de/contentid/44545

Printed on: April 19, 2024 at 19:04 o'clock

Member: DaSam
DaSam Nov 15, 2006 at 20:02:13 (UTC)
Goto Top
Hi,

ein solches Programm werde ich jetzt nicht schreiben, dafür gibt es schon genügend Treffer in den bekannten Suchmaschinen.

Zur Frage: Call by reference übergibt letztendlich einen Pointer auf die übergebene Variable (also eine Referenz). Call by value erstellt in der Funktion praktisch eine dort gültige Variable mit dem Inhalt der Übergabe. Änderungen am Variablenwert werden sich nicht auf die im aufrunfenden Programmteil deklarierte Variable auswirken (weil Kopie), bei call by refernce werden Wertänderungen in der Variablen auch im aufrufenden Programmteil übernommen. So ist es z.B. auch möglich, mehrere Werte bei einer Funktion als "Quasi-Rückgabewert" zu bekommen.

Puuh ...

cu,
Alex
Member: Biber
Biber Nov 16, 2006 at 00:25:12 (UTC)
Goto Top
Moin Abdel,

wie schon geschrieben, zu IsLeapYear()/IsLeapYr() gibt es jede Menge Beispielimplementierungen.
Sinngemäß und ungetestet wäre der Mainstream in etwa...

int daysInFebruary( int year)
{
    if ((year%400==0) || ((year %4==0) && (year%100 !=0)))
    {
        return 29; // wie das bei Schaltjahren so is' 
    }
    
    else
    {
        return 28; // sonst...ein Arbeitstach weniger... kein Schaltjahr
    }
}
- oder, der Normalfall in C[whatever] über ein #define-Makro
 
#define ISLEAPYEAR(Y)     ( ((Y)>0) && !((Y)%4) && ( ((Y)%100) || !((Y)%400) ) )
....
...
int daysInFebruary( int year)
{
    return ( (ISLEAPYEAR(year)) ? 29 :28);
}

Und es ist völlig normal, wenn Du für diese Aufgabe viele verschiedene Lösungen findest und Deine selbst gebastelte auch ein wenig anders aussieht.

Gruß Biber