ניתוח מערכות מידע ב
This presentation is the property of its rightful owner.
Sponsored Links
1 / 77

ניתוח מערכות מידע ב PowerPoint PPT Presentation


  • 123 Views
  • Uploaded on
  • Presentation posted in: General

ניתוח מערכות מידע ב. נעים להכיר... תכנות ב C#. ניתוח מערכות מידע ב'. מרצים מכון לב - ד"ר אבי רוזנפלד מכון טל – ד"ר אריאלה ריכרדסון שעות קבלה: בתאום מראש בדוא"ל אתר הקורס – http://www.jct.ac.il/~rosenfa/nituach2 עדכונים מצגות דוגמאות וחומר לחזרה סילבוס. נושאים שילמדו בקורס.

Download Presentation

ניתוח מערכות מידע ב

An Image/Link below is provided (as is) to download presentation

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -

Presentation Transcript


5793943

ניתוח מערכות מידע ב

נעים להכיר...

תכנות ב C#


5793943

ניתוח מערכות מידע ב'

  • מרצים

    • מכון לב - ד"ר אבי רוזנפלד

    • מכון טל – ד"ר אריאלה ריכרדסון

    • שעות קבלה:

      • בתאום מראש בדוא"ל

  • אתר הקורס – http://www.jct.ac.il/~rosenfa/nituach2

    • עדכונים

    • מצגות

    • דוגמאות וחומר לחזרה

    • סילבוס


5793943

נושאים שילמדו בקורס

  • הכרות עם C#

  • תיכנון מונחה עצמים מתקדם

    • Polymorphism, composition, association

    • תרשימי UML מתאימים

  • בניית ממשק למשתמש

  • הכרות ADO

    • שילוב בין בסיסי נתונים וC#

  • פרויקט מסכם


5793943

ספרים

  • Requirements Analysis and System Design, 3rd ed. Leszek A. Maciaszek

  • Object-Oriented Systems Analysis and Design Using UML, 3rd ed. , Simon Bennett, Steve Mcrobb, Ray Farmer

  • #C  כשפת אם. – Object Oriented Design .net framework. יצחק גרבר.

  • Visual C# 2010, How to Program (4th Edition), Deitel and Deitel.

  • Pro Asp.Net 4 in C# 2010, 4th ed. Matthew MacDonald, Adam Freeman, and Mario Szpuszta.


5793943

הכרות עם C#

פקודות כלליות


5793943

דוגמא - טיפול בקלט ופלט

using System;

class IOProgram

{

static void Main(string[] args)

{

Console.WriteLine("Please Type Something:");

String x;

x = Console.ReadLine();

Console.WriteLine("You typed {0}" , x );

Console. ReadKey();

}

}


5793943

קלט של מספרים

using System;

class numberProgram

{

static void Main(string[] args)

{

String x;

int y;

Console.WriteLine("Enter a number:");

x = Console.ReadLine();

y = int.Parse(x);

Console.WriteLine("You typed {0}" ,x);

Console.WriteLine("Adding 2 makes: {0} or {1}", x+2, y+2 );

Console. ReadKey();

}

}


5793943

דוגמא - if

using System;

class ifProgram

{

static void Main(string[] args)

{

string x;

x = Console.ReadLine();

if (x == "a" || x == "A")

Console.WriteLine("A is for apple");

else if (x == "b" || x == "B")

Console.WriteLine("B is for Boy");

else

Console.WriteLine("Not defined");

Console.ReadKey();

}

}


5793943

דוגמא - for

using System;

class ifProgram

{

static void Main(string[] args)

{

for (int i = 0; i < 100; i++)

Console.WriteLine("The square root of {0} is {1} ", i, Math.Sqrt(i) );

Console.ReadKey();

}

}


While

דוגמא - while

using System;

class FirstProgram

{

static void Main(string[] args)

{

int NUM_GAMES = 12;

int won;

double ratio;

Console.WriteLine("Enter num of games won (0 to {0})", NUM_GAMES);

string tmp = Console.ReadLine();

won = int.Parse(tmp);

while (won < 0 || won > NUM_GAMES)

{

Console.WriteLine ("Invalid input. Please reenter: ");

tmp = Console.ReadLine();

won = int.Parse(tmp);

}

ratio = (double)won / NUM_GAMES;

Console.WriteLine ("Winning percentage is: {0}", ratio);

}

}


5793943

int grade, category;

Console.WriteLine("Enter a numeric grade (0 to 100): ");

string tmp = Console.ReadLine();

grade = int.Parse(tmp);

category = grade / 10;

switch (category)

{

case 10:

Console.WriteLine("Perfect score. Well done.");

break;

case 9:

Console.WriteLine("Well above average. Excellent.");

break;

case 8:

Console.WriteLine("Above average. Nice job.");

break;

case 7:

Console.WriteLine("Average.");

break;

default:

Console.WriteLine("Study some more.");

break;

}


5793943

הבדלים בין אופרטורים של VB ל C#


5793943

הבדלים בין אופרטורים של VB ל C#המשך...


5793943

מחלקות


5793943

עקרונות בתכנון מונחה עצמים

  • תכנון מונחה עצמים תומך בעקרונות הבאים

    • הכמסה – encapsulation

    • ירושה – inheritance

    • פולימורפיזם‎ - polymorphism

נלמד עכשיו

נלמד בהמשך


5793943

חשבון הבנק – מחלקה ואוביקט

אוביקטים

(המימוש)

מחלקה

(הרעיון/תבנית)

שם אוביקט

שם מחלקה

שם מחלקה

תכונות + ערכים

תכונות

פעולות


5793943

נראה תחילה איך מייצרים מחלקה


Encapsulation

מהי הכמסה (encapsulation)

  • אפשר להסתכל על מחלקה בשני אופנים

    • פנימי – הפרטים של המחלקה, התכונות והפעולות שלה

    • חיצוני – השירותים שהמחלקה מספקת

פנימי

חיצוני


Encapsulation1

מהי הכמסה (encapsulation)

  • אפשר להסתכל על מחלקה בשני אופנים

    • פנימי – הפרטים של המחלקה, התכונות והפעולות שלה

    • חיצוני – השירותים שהמחלקה מספקת

פנימי

חיצוני


Public

public - מאפשר גישה גם מחוץ למחלקה

  • תכונות

    • בדרך כלל תכונות לא יוגדרו public

  • מתודות

    • בדרך כלל יוגדרו public שכן הן מיועדות לשימוש מחוץ למחלקה

      • מאפשר גישה למתודות מחוץ למחלקה

      • מאפשר גישה מכל מתודות המחלקה


Get set

get, set

  • כיוון שאין גישה לתכונות המחלקה באופן ישיר, מקובל להגדיר מתודות גישה לתכונות

  • מתודות אלו נקראות בשמות

    • getX - מחזירה את ערך התכונה X (נקרא גם accessor)

    • setX - קובע את ערך התכונה X (נקרא גם mutator)

  • מתודות get ו- set מאפשרות גישה מבוקרת לתכונות המחלקה

    • ניתן להגביל טווח ערכים

    • ניתן לבדוק שהערכים תקינים

    • כאשר אין צורך לא נגדיר לתכונות מתודות get ו set


5793943

דוגמא של פונקציה של VOID

namespace ConsoleApplication1

{

classProgram

{

publicstaticvoid XYZ()

{

Console.WriteLine("There");

}

publicstaticvoid Do(int x)

{

Console.WriteLine(x+2);

}

staticvoid Main(string[] args)

{

XYZ();

Do(4);

int y = 3;

Do(y);

Console.WriteLine("Hi");

}

}

}


5793943

דוגמא של פונקציה שמחזירה ערך

namespace ConsoleApplication1

{

class Program

{

public static int XYZ(int x)

{

return x + 2;

}

static void Main(string[] args)

{

XYZ(4);

int y = 3;

XYZ(y);

Console.WriteLine("Hi");

}

}

}


5793943

דוגמא של מערך

namespace ConsoleApplication1

{

class Program

{

static void Main(string[] args)

{

int[] numbers = new int[10]; // numbers is a 10-element array

numbers[0] = 1;

numbers[2] = -3;

for (int i = 0; i < 10; i++)

Console.WriteLine("pos " + i + " is " + numbers[i]);

}

}

}


C bankaccount

קוד C# למימוש מחלקה BankAccount

using System;

public class BankAccount

{

private String name;

private float balance;

public BankAccount(String name)

{ //constructor body }

public float getBalance( )

{ //method body }

public void deposit(float sum)

{ //method body }

public void draw(float sum)

{ //method body }

}

תכונות

בנאי (constructor)

פעולה (מתודה)


5793943

המימוש המלא – חלק 1

using System;

public class BankAccount

{

//attributes

private String _name;

private float _balance;

//constructor

public BankAccount(String name)

{

_name = name;

_balance = 0;

}

המשך בשקף הבא


5793943

המימוש המלא – חלק 2

//methods

public float getBalance( )

{

return _balance;

}

public void deposit(float sum)

{

_balance += sum;

}

public void draw(float sum)

{

_balance -= sum;

}

}


5793943

מתודות - דגשים

דגשים


5793943

כותרת המתודה

  • הצהרת מתודה מתחילה בכותרת

סוג גישה

public int calc (int num1, int num2)

שם המתודה

רשימת פרמטרים

רשימת הפרמטרים מגדירה עבור כל פרמטר

את הטיפוס שלו ואת שמו

טיפוס הערך המוחזר


5793943

גוף המתודה

  • לאחר הכותרת מגיע גוף המתודה

public int calc (int num1, int num2)

{

int sum = num1 + num2;

return sum;

}

sumהוא משתנה לוקלי

הוא מיוצר בכל פעם שהמתודה נקראת ומושמד כאשר מסיימת להתבצע

הטיפוס שמחזירים צריך להיות זהה

לטיפוס הערך המוחזר


Return

פקודת return

  • טיפוס הערך המוחזר של מתודה קובע את הטיפוס של הערך שיוחזר למקום ממנו נקראה המתודה

  • למתודה שלא מחזירה ערך יש טיפוס ערך מוחזר void

public int calc (int num1, int num2)

{

int X;

// do something

return X;

}

public void calc (int num1, int num2)

{

// do something

}


Return1

פקודת return(המשך)

  • פקודת ה-return קובעת את הערך המוחזר

    • הערך שיש ב X יוחזר

  • ניתן גם להחזיר ערך של ביטוי

    • הערך המוחזר ע"י הביטוי צריך להתאים לטיפוס הערך המוחזר

public int calc (int num1, int num2)

{

int X;

// do something

return X;

}

public bool calc (int num1, int num2)

{

return num1<num2;

}


Contructor

בנאי - contructor

  • בנאי (constructor) היא מתודה מיוחדת

  • לכל מחלקה יש להגדיר בנאי

    • שם הבנאי זהה לשם המחלקה

    • הבנאי אינו מחזיר ערך

  • הבנאי נקרא באופן אוטומטי כאשר אוביקט נוצר

  • בדרך כלל נבצע פעולות של איתחול בבנאי

  • יתכנו מספר בנאים למחלקה אחת

    • לכל אחד מהבנאים יש לקבוע רשימת פרמטרים שונה


5793943

בנאים

  • בנאי יכול להופיע ללא פרמטרים או עם פרמטרים

  • אפשר להגדיר מספר בנאים, אם יש לכל אחד פרמטרים שונים

    • מספר שונה של פרמטירם

      או

    • טיפוסים שונים של פרמטרים

public class BankAccount

{

private String _name;

private float _balance;

//constructor without parameters

public BankAccount()

{

_name = null;

_balance = 0;

}

//constructor with parameters

public BankAccount(String name)

{

_name = name;

_balance = 0;

}

  • }


5793943

בנאים - ערך מוחזר

  • לבנאים איןערך מוחזר!!! אפילו לא void

  • טעות נפוצה – לתת טיפוס לבנאי

    • גורם לבנאי להיות מתודה רגילה

  • במידה ולא הוגדר בנאי למחלקה:

    • יוגדר באופן אוטומטי בנאי ריק

    • לבנאי הריק אין פרמטרים

    • הבנאי הריק לא מבצע שום פעולה


5793943

שימוש במחלקות ואוביקטים

דגשים


5793943

יצרנו את המחלקה,עכשיו נרצה לייצר אוביקטים

אוביקטים

(המימוש)


C bankaccount1

קוד C# ליצירת אוביקטים של BankAccount

using System;

public class test

{

static void Main(String[] args)

{

BankAccount Account1 = new BankAccount("Tamar");

BankAccount Account2 = new BankAccount("Moshe");

Account1.deposit(20000);

Account2.deposit(100);

Account2.draw(600);

}

}

יצירת אוביקטים

שימוש בפעולות


5793943

יצירת אוביקטים

  • משתנה מכיל טיפוס בסיסי (int, float …) או הצבעה לאוביקט

  • ניתן להצהיר על משתנה מטיפוס מחלקה כלשהי Circle circ1;

    • לא נוצר אוביקט בהצהרה הנ"ל!!

    • המשתנה מכיל כתובת בזכרון עבור האוביקט

  • יש לייצר את האוביקט במפורש ע"י שימוש ב newהמבצע קריאה לבנאי

    circ1 = new Circle();

    Circle circ1 = new Circle(); ניתן לשלב את שתי הפעולות ביחד:

diameter = 30;

xPosition = 20;

yPosition = 60;

color = "blue";

isVisible = false;

circ1


5793943

הפעלת מתודות

  • ברגע שיצרנו אוביקט אפשר להשתמש באופרטור '.' כדי להפעיל מתודות שלו.

    int size=0;

    Circle circ1;

    circ1 = new Circle();

    circ1.moveHorizontal(10);

    size = circ1.getSize();

  • מתודה יכולה להחזיר ערך (כמו getSize())

    • ניתן להשתמש בערך לביצוע השמה או בתוך ביטוי

  • אפשר לחשוב על קריאה למתודה כ"הפעלת שירות של המחלקה"


Overloading

העמסה - overloading

  • ראינו כבר שאפשר לייצר כמה בנאים

  • ניתן לתת הגדרות שונות גם למתודות רגילות

  • העמסה (overloading) – יש מספר מתודות עם אותו שם

  • על החותמת (signature) של המתודה להיות יחודית, כלומר:

    • מספר הפרמטרים, הטיפוס שלהם והסדר שלהם

  • הטיפוס המוחזר אינו חלק מהחותמת

    • כלומר אסור ששני מתודות יבדלו רק ע"י הטיפוס המוחזר


5793943

מי יופעל?

result = tryMe(25, 5)

העמסה – רשימת הפרמטרים

  • הקומפיילר קובע לאיזה מתודה לקרוא ע"י ניתוח הפרמטרים

static float tryMe(int x)

{

return x + 10;

}

static float tryMe(int x, int y)

{

return x*y;

}


5793943

null

  • null הוא ערך מיוחד עבור אוביקטים

    • משמעות null הוא "שום דבר"

    • טיפוסים פרימיטיבים (int, float, …) לא יכולים לקבל null

    • מקביל ל Nothing ב VB

  • ניתן לתת לאובייקט ערך null בצורה הבאה:

    String s = null;

  • אפשר גם לבדוק אם אובייקט מסויים הוא null:

    if (s == null) // Do something

  • האובייקטים שהוכרזו אך לא אותחלו - מכילים ערך null.

  • ניסיון לבצע פעולה על אובייקט שהוא null יגרור קריסה של התוכנית


Enumerated types

Enumerated Types

  • משתמשים ב enumכדי להגדיר טיפוס המקבל ערכים מוגדרים מראש

    • שקול ל Enum של VB

  • למשל נגדיר טיפוס שנקרא Season

    enum Season {winter, spring, summer, fall};

  • ניתן להגדיר כמה ערכים שנרצה

  • לאחר ההגדרה ניתן להגדיר משתנים מהטיפוס החדש

    Season time;

  • ולאתחל ערכים

    time = Season.fall;


5793943

בנאי העתקה


Point

המחלקה Point

  • נגדיר מחלקה בשם Point של נקודה במרחב.

    • למחלקה שני מאפיינים, רכיב X ורכיב Y

public class Point

{

private double _x,_y;

public Point(double x, double y) { _x = x; _y = y;}

public double getX() { return _x; }

public double getY() { return _y; }

public void setX(double x) { _x = x; }

public void setY(double y) { _y = y; }

}


Tostring

הוספת מתודה toString

public class Point

{

private double _x,_y;

public Point(double x, double y) { _x = x; _y = y;}

public double getX() { return _x; }

public double getY() { return _y; }

public void setX(double x) { _x = x; }

public void setY(double y) { _y = y; }

public String toString()

{//return the relevant string

return _x + "," + _y;

}

}


5793943

1 2

Before:

p1

1 2

5 2

p1

p1

Then:

After:

p2

p2

השמה של אוביקטים

  • עבור אוביקטים השמה מעתיקה את הכתובת

Point p2 = p1;

p2.setX(5);


5793943

1 2

Before:

p1

1 2

1 2

p1

p1

Then:

After:

5 2

1 2

p2

p2

מה שרוצים:

  • לייצר אוביקט חדש שהתוכן שלו זהה לישן

Point p2 = new Point(p1)

p2.setX(5);


5793943

p1

p2

1 2

1 2

הפתרון: בנאי העתקה

  • בנאי העתקה copy constructor

  • משכפל אוביקט

    • מייצר אוביקט חדש

    • מאתחל את האוביקט החדש באופן זהה לישן


Copy constructor

הוספת בנאי העתקה (copy constructor)

public class Point

{

private double _x,_y;

public Point(double x, double y) { _x = x; _y = y;}

//copy constructor

public Point(Point otherPoint)

{

_x = otherPoint._x;

_y = otherPoint._y;

}

public double getX() { return _x; }

public double getY() { return _y; }

public void setX(double x) { _x = x; }

public void setY(double y) { _y = y; }

public String toString()

{//return the relevant string

return _x + "," + _y;

}

}


5793943

העברת אוביקטים


5793943

העברת אוביקט כפרמטר

  • אפשר להעביר אוביקט כפרמטר - נראה דוגמא במחלקה Point

  • נממש מתודה שמחשבת מרחק בין הנקודה של האוביקט לנקודה אחרת

  • מרחק בין 2 נקודות מוגדר:

public double distance(Point otherPoint)

{

double diffX = Math.Pow(_x-otherPoint._x,2);

double diffY = Math.Pow(_y-otherPoint._y,2);

return Math.Sqrt(diffX+diffY);

}


Point1

החזרת אוביקט ממתודה ב Point

  • נממש מתודה שמחזירה את הנקודה באמצע הדרך מהמרכז (0,0) לנקודה של האוביקט

    • עבור הנקודה (10,4) תחזיר (5,2)

    • עבור הנקודה (4,7) תחזיר (2,3.5)

public Point halfPoint()

{

double halfX = _x/2;

double halfY = _y/2;

Point halfPoint = new Point(halfX, halfY);

return halfPoint;

}


5793943

עוד דרך להחזרת אוביקט:

  • אפשר לבצע את ה new בתוך פקודת ה return

public Point halfPoint()

{

return new Point(_x/2,_y/2);

}


Halfpoint

דוגמא לשימוש במתודה halfPoint

Point p1 = new Point(10,4);

Point p2 = new Point(4,7);

Point middlePoint = p1.halfPoint();

Console.WriteLine(p2.halfPoint());

פלט:

2.0,3.5


5793943

אוביקט כתכונה

Aggregation


5793943

אוביקט כתכונה

  • נרצה להגדיר למחלקה תכונות שהן מחלקה אחרת שיצרנו.

    • מאפשר שימוש חוזר של קוד ובנייה של מחלקות מורכבות

  • נניח נרצה ליצור מחלקה המתארת מעגל

    • הגדרנו מחלקה עבור נקודה

      • Point

    • נגדיר מחלקה עבור מעגל

      • תכונה 1: המרכז (מסוג Point)

      • תכונה 2: רדיוס

radius

Point


5793943

הגדרת המעגל

public class Circle

{

private double _radius;

private Point _center;

//constructor 1

public Circle(double r, double x, double y)

{

_radius = r;

_center = new Point(x, y);

}

//constructor 2

public Circle(double r, Point p)

{

_radius = r;

_center = new Point(p);

}

}

שימו לב!

בכל הבנאים

על מנת לאתחל את המרכז

יש לבצע new


5793943

הגדרת המעגל

public class TestCircle

{

static void Main(String[] args)

{

//making a circle using radius and x,y coordiantes

Circle circ1 = new Circle(10,2,4);

//making a circle using a radius, and a point

Point pt = new Point(5,6);

Circle circ2 = new Circle(20, pt);

what if we want to print the circle information?

}

}


5793943

הגדרת המעגל

public class Circle

{

private double _radius;

private Point _center;

//constructor 1

public Circle(double r, double x, double y)

{

_radius = r;

_center = new Point(x, y);

}

//constructor 2

public Circle(double r, Point p)

{

_radius = r;

_center = new Point(p);

}

//toString

public String toString()

{

return ("radius is " + _radius + ",\t" + "center is " + _center);

}

}

כאן נקראת מתודת

toString

של

Point


5793943

הגדרת המעגל

public class TestCircle

{

static void Main(String[] args)

{

//making a circle using radius and x,y coordiantes

Circle circ1 = new Circle(10,2,4);

//making a circle using a radius, and a point

Point pt = new Point(5,6);

Circle circ2 = new Circle(20, pt);

//Now we can print

Console.WriteLine("circ1: " + circ1.ToString());

Console.WriteLine("circ2: " + circ2.ToString());

}

}


5793943

הגדרת המעגל

public class Circle

{

private double _radius;

private Point _center;

//constructor 1

public Circle(double r, double x, double y)

{

_radius = r;

_center = new Point(x, y);

}

//constructor 2

public Circle(double r, Point p)

{

_radius = r;

_center = new Point(p);

}

//toString

public String ToString()

{

return ("radius is " + _radius + ",\t" + "center is " + _center.ToString());

}

public void setRadius(double r)

{

_radius = r;

}

public double getRadius()

{

return _radius;

}

}

set & get

עבור רדיוס (טיפוס double )


Setcenter

setCenter - אפשרות א'

  • המתודה תקבל את הקואורדינטות x ו y

public void setCenter(double x, double y)

{

_center.setX(x);

_center.setY(y);

}

public void setCenter(double x, double y)

{

_center._x=x;

_center._y=y;

}

לא ניתן לגשת לתכונות פרטיות של center מסוג Point !!!


Setcenter1

setCenter - אפשרות ב'

משתמש

בבנאי העתקה

של Point

  • המתודה תקבל מרכז (נקודה)

    • (העברת אוביקט כפרמטר)

public void setCenter(Point p)

{

_center = new Point(p);

}

public void setCenter(Point p)

{

_center.setX(p.getX());

_center.setY(p.getY());

}

או

public void setCenter(Point p)

{

_center =p;

}

public void setCenter(Point p)

{

_center._x = p._x;

_center._y = p._y;

}

aliasing

private


Getcenter

getCenter - הנכון

  • הדרך הנכונה להחזרת המרכז:

public Point getCenter()

{

return new Point(_center);

}

  • במקרה זה יוחזר העתק של התכונה

    • שימוש בבנאי העתקה

  • עקרון ההכמסה (encapsulation) נשמר.

    • אם היינו מחזירים בלי new היה אפשר לשנות מחוץ למחלקה


5793943

הגדרת המעגל

דוגמאות לשימוש

set, get:

public class TestCircle

{

static void Main(String[] args)

{

Circle circ1 = new Circle(10, 2, 4);

//set and get as usual

circ1.setRadius(100);

double rad2 = circ1.getRadius();

//set using coordinates

circ1.setCenter(7, 8);

//set using a Point

Point p3 = new Point(9, 9);

circ1.setCenter(p3);

//get returning a Point

Point center2 = circ1.getCenter();

}

}


Circle

נרחיב את המחלקה Circle

  • מתודה המחזירה שטח המעגל

public double area()

{

return _radius * _radius * Math.PI;

}

  • מתודה המחזירה היקף המעגל

public double perimeter()

{

return _radius * 2 * Math.PI;

}


5793943

מעבדה

  • נרחיב את המחלקה Circle

  • מתודה הבודקת אם המעגל מוכל כולו ברביע הראשון

    • איך נדע?

public boolean isInFirstQuarter()

{

return (_center.getX() - _radius >=0 && _center.getY() - _radius >=0);

}


5793943

מעבדה 2

  • נרחיב את המחלקה Circle

  • מתודה הבודקת אם נקודה היא בתוך המעגל

    • מה צריך לבדוק?

public boolean isPointInside(Point p)

{

return (_center.distance(p) <_radius );

}


5793943

C#מערכים


5793943

מערך – הצהרה ויצירה

  • ניתן להצהיר על מערך באופן הבא:

    int[] scores;

    • הצהרה כנ"ל מגדירה רק קיום של מערך ללא המערך עצמו

    • scores מצביע כעת לכתובת null

  • אם רוצים לייצר מופע (instance) של המערך נשתמש ב new:

    scores = new int[10];

  • זה יגדיר מערך של 10 int


5793943

דוגמאות להצהרה ויצירה

int[] prices = new int[500];

bool[] flags;

int length = 20;

flags = new bool[length];

char[] codes = new char[1750];

מערך שגודלו נקבע בזמן ריצה:

int n = int.Parse(Console.ReadLine());

int[] a = new int[n];


5793943

79 87 94 82 67 98 87 81 74 91

מערכים – גישה לתא בודד

  • מתיחסים לתא בודד במערך ע"י [ ] (סוגריים מרובעים)

    • למשל scores[3] מתיחס לתא הרביעי במערך, וערכו 82.

    • התא הראשון הוא scores[0]

    • המערך הזה הוא של int ולכן בתא בודד ניתן להשתמש כמו כל int אחר

      int a = scores[2];

      mean = (scores[0] + scores[1])/2;

      Console.WriteLine ("Top = " + scores[5]);

0 1 2 3 4 5 6 7 8 9

scores


5793943

אורך מערך

  • Length מייצג את מספר האיברים במערך

  • int a = scores.Length;

    • ל a יהיה הערך 10

  • Console.WriteLine(scores.Length);

    • ידפיס 10

  • שימו לב:

    • Length מכיל את מספר האיברים ולא האינדקס הכי גבוה!

      • האינדקס הכי גבוה הוא Length-1


  • 5793943

    רשימת אתחול

    • ניתן ליצור מערך ולמלא בו ערכים ע"י שימוש ברשימת אתחול

    int[] units = {147, 323, 89, 933, 540, 269, 97, 114}

    char[] letterGrades = {'A', 'B', 'C', 'D', 'F'};

    • הערכים מופרדים ע"י פסיק

    • גודל המערך נקבע לפי אורך הרשימה

    • אין צורך להשתמש ב new

    • אפשר להשתמש ברשימת אתחול רק בזמן הגדרת המערך


    5793943

    מערך - הדפסת כל האיברים

    • יש לעבור על המערך (נעבור על כל התאים שלו)

      • אורכו arr.Length

    • נדפיס את התוכן של התא

    int[] arr = {1,2,3,4,5};

    for(int i =0; i<arr.Length; i++)

    {

    Console.WriteLine(arr[i]);

    }


  • Login