תרגילים

 

  1. משוואה ריבועית (פתרון כאן)

מועד ההגשה : שבוע מס' 2

לפתח פונקציה שפותרת משוואה ריבועית. פונקציה הנדרשת אמורה לקבל 5 פרמטרים:

אב טיפוס של פונקציה הוא:

int Equat2( double a, double b, double c,

            double *px1, double *px2 );

 

לפתח פונקציה שעושה את אותה עבודה רק את המשתנים עבור ערכי השורשים היא מקבלת כייחוסים (reference ) במילים אחרות, אב- טיפוס של פונקציה הוא:

int Equat2( double a, double b, double c,

            double &rx1, double &rx2 );

 

חשוב ! לתת את אותו שם לשתי הפונקציות  ולשים אותן במסגרת של תכנית אחת כדי לוודא שעמסת פונקציות פועלת כסדרה. לוודא גם ששתי הפונקציות מגיעות לאותן תוצאות.


  1. פונקציה Prev במחלקת Date (פתרון כאן )
מועד ההגשה: שבוע מס' 3

במחלקת Date לפתח פונקציה הברה (member function) בשם Prev שמשנה את התאריך שנמצא בשדות של this ביום אחד אחורה ( הפוכה לפונקציה Next ).

 


  1. בנאי ברירת מחדל במחלקת Date (פתרון כאן )
מועד ההגשה:  שבוע מס' 4

להוסיף למחלקת Date ( דפים 20-21 ) ארבעה בנאיים שאותם למדתם בהרצאה.

לוודא שמחלקה פועלת ואחרי זה להחליף בנאי ברירת מחדל:

Date::Date( void ): day(1), month(1), year(1900) { }

בגרסה חדשה: במקום לאתחל שדות ע"י תאריך 01/01/1900 מאתחלת אותם כתאריך נוכחי של המחשב

לתשומת לב ! כדי להתניען בקובץ time.h

 


  1. פיתוח במחלקת Point ( פתרון כאן )

מועד ההגשה: שבוע מס' 5

לפתח מחלקת Point שמאפיינת נקודה על השטח עם שתי קוורדינטות מסוג double. במחלקה זו יש לפתח שלושה בנאיים, פונקציות גישה. בנוסף לזה יש לפתח

לפתח אפליקציה שקולטת שלוש נקודות כלשהן, מציגה אותן על המסך ומחפשת מהו זוג הנקודות הקרובות ביותר.


  1. פונקציות לספירת "מילים" במחלקת SString ( פתרון כאן )
מועד הגשה: שבוע מס' 6

במחלקת SString לפתח פונקציה (member) שסופרת מספר "מילים" במחרוזת. נגדיר ש-"מילה" זוהי חלק המחרוזתבין 2 סימני

הפרדה (למשל רווחים ). נגדיר גם שאב-טיפוס של פונקציה הנדרשת הוא:

 

int SString::NumOfWords( void );

 

נא לפתח את הפונקציה ע"י פונקציה סטנדרטית strtok שהוכרזה ב-<string.h>

במחלקת SString לפתח פונקציה (member) שמחזירה את ה"מילה" הנדרשת ממחרוזת. אב-טיפוס של פונקציה להגדיר כך:

 

 SString SString::Word( int k );

 

פונקציה Word מקבלת פרמטר שמציין מספר ה"מילה" הנדרשת ( 0, 1, 2, ..... ) במחזירה אותה כאובייקט מסוג SString.

במקרה שאין מספר מילה כזה במחרוזת ההחזר מכיל מחרוזת ריקה.

נא לפתח ע"י פונקציה סטנדרטית strtok.


  1. עמסת אופרטורים במחלקת SString ( פתרון כאן )

מועד ההגשה:  שבוע מס' 7

במחלקת SString לפתח אופרטורים הבאים:


  1. עמסת אופרטורים במחלקת Date ( פתרון כאן )

מועד ההגשה: שבוע מס' 8

במחלקת Date לפתח אופרטורים ופונקציה הבאים:

לצרכים אלו להוסיף למחלקת Date הגדרות הבאות:

תאריך ג'וליאני זהו פורמת של תאריך שהוגדר כמספר ימים שעברו מתאריך בסיסי.

לדוגמה: אם תאריך בסיסי הוא 01/01/1970 אז תאריך ג'וליאני של יום 01/01/1971 הוא 365, של יום 03/01/1971 – 367 וכן

הלאה.

             typedef long JDate;  // אליאס להבנה יותר טובה

     class Date

     {

         private:

             JDate DateToJulian( void ) const;   

             void JulianToDate( JDate );

             . . .

     };

             const int BaseYear = 1970;      // base date 01/01/1970

     int IsLeapYear( int y );        // is year no. y leap ?

     int DaysInYear( int y );        // number of days in year no. y

     int DaysInMonth( int m, int y );// number of days in month no. m in year no. y

תוספות למחלקת Date שנותנת להתקדם עם עמסת אופרטורים ניתן להוריד כאן


  1. בנאיים ומפרקים במקרה של הרכב המחלקות ( פתרון כאן )

מועד ההגשה:  שבוע מס' 9

לפתח מחלקת Rect שמייצגת מלבן ע"י שתי נקודות

class Rect

{

private:

Point rl;

Point rb;

. . .

};

יש להשתמש במחלקת Point מתרגיל 4 עם תוספות הבאות:

במחלקת Rect יש לפתח :

מחלקות Point ו-Rect מאפשרות לבדוק סדר עבודה בנאיים ומפרקים במקרה של הרכב. לצורך הבדיקה יש להוריד קובץ עם פונקציה ראשית (main) ולארגן פרוייקט.

להפעיל אותו ולוודא שבנאיים ומפרקים במחלקות Point ו-Rect עובדים כצפוי

 


  1. הורשה ופולימורפיזם ( פתרון כאן )

מועד ההגשה:  שבוע מס' 10

נתנו שתי מחלקות שמאפיינות צורות גיאומטריות:

 

class Circle                        // עגול

{

protected:

float x0, y0; // קואורדינטות מרכז העגיל

float r;        // רדיוס העגול

public:

Circle( float X = 0, float Y = 0, float R = 1 ):

                x0( X ), y0( Y ), r( R ) {}  // בנאי    

float Area( void ) const { return 3.14 * r * r; }       // שטח העגול

void Read( void ) // קלט העגול

{

cout << “x0=”; cin >> x0;

cout << “y0=”; cin >> y0;

cout << "r="; cin >> r; 

}

void Write( voidconst // פלט העגול

{

сout << "Circle:" << endl;

          cout << “x0=” << x0 << endl;

          cout << “y0=” << y0 << endl;

          cout << "r=" << r << endl;

}

};

class Rectangle // מלבן

{

protected:

float x0, y0; // קואורדינטות של פינה שמלית עליונה

float width; // רוחב המלבן

float height; // גובה המלבן

public:

Rectangle( float X = 0, float Y = 0, float W = 0, float H = 0 ):

        x0( X ), y0( Y  ), width( W ), height( H ) {} // בנאי

float Area( void ) const { return width * height; } // שטח המלבן

};

 

להפוך שתי מחלקות הבודדות האלה למערכת מחלקות פולימורפית שבה הוגדרה מחלקה בסיסית אבסטרקטית משותפת לפי תרשים להלן:

במערכת זו יש


  1. מבוא ל-STL ( פתרון כאן )

מועד ההגשה: שבוע מס' 11


  1.  תרגיל מסקם ( פתרון כאן )

מועד ההגשה: שבוע אחרון

    ניתנו שני קבצי  ASCII: stud.txt שמכיל נתונים אישיים של סטודנטים ו-teach.txt עם נתונים של מרצים.

 מבנה של קובץ stud.txt

 

קובץ בנוי כך שנתונים של כל סטודנט נמצאים בשלוש שורות: בשורה ראשונה – שם פרטי ושם משפחה, בשורה שנייה – קוד של כיתה בפורמט YYCC, איפה YY- שנת לימוד ו-CC – מספר הכיתה, ובשורה שלישית – תאריך לידה של סטודנט בפורמט DD/MM/YYYY.

אחרי כל שלוש שורות ישנה שורה ריקה (שורת הפרדה).

 

דוגמה של קוד הכיתה:  ערך 0201 מאפיין את כיתה מספר 1 של שנה ב'

 

מבנה של קובץ teach.txt

 

קובץ בנוי כך שנתונים של כל מרצה נמצאים בשלוש שורות: בשורה ראשונה -  – שם פרטי ושם משפחה, בשורה שנייה שם המקצוע ובשורה שלישית - תאריך לידה של מרצה בפורמט DD/MM/YYYY.

אחרי כל שלוש שורות ישנן שתי שורות ריקות (שורות הפרדה).

 

תוכן הפיתוח

 

יש לפתח תוכנית שמבצעת שלבים הבאים:

 

הערות

 

  
לתחילת הדף

תוצאות הגשת התרגילים נכונות ל- 16/11/2003  

תאריך עדכון האחרון: נובמבר 17, 2003

 

-->