160 likes | 485 Views
String. string היכרות ראשונית עם המחלקה. בשפת # C מוגדרת מחלקה בשם String הצהרה על המשתנה מטיפוס נראית כך : string s1; אתחול משתנה String string s1 = "hello"; string s2 = "good morning";. סיכום הפעולות במחלקת STRING. סיכום הפעולות במחלקת STRING. בעיה במחרוזות.
E N D
string היכרות ראשונית עם המחלקה • בשפת #C מוגדרת מחלקה בשם String • הצהרה על המשתנה מטיפוס נראית כך : string s1; אתחול משתנה String string s1 = "hello"; string s2 = "good morning";
בעיה במחרוזות בסיום הבחינות לכוכב נולד, יוצאת אחת מנשות ההפקה. ומקריאה את רשימתהמועמדים שהתקבלו על פי סדר הא"ב. מועמד אשר שומע את שמו יודע כי התקבל ללהקה. מועמד ששמו עדיין לא נקרא, אשר שומע שם אחר שמופיע אחריו בסדר הא"ב, יודע כי לא התקבל ללהקה. כתוב אלגוריתם שבודק האם המועמד התקבל, וכמה שמות הוא שמע עד לידיעה כי התקבל.
פירוק הבעיה לתת-משימות • האלגוריתם צריך להשוות מחרוזות ובנוסף לבצע מנייה. • שלבי האלגוריתם: • קליטת שם המועמד • קליטת שמות המועמדים שהתקבלו והשוואתם לשם המועמד • מניית מספר השמות שנקלטו • הצגה אם המועמד התקבל והצגת מספר השמות שהיה עליו לשמוע • תת- משימה 3 תבוצע בדומה למשימות מנייה אחרות, ההבדל הוא כמובן בטיפוס הערכים הנמנים – מחרוזת במקרה זה – ובאופן ביצוע הפעולות עליהם.
בחירת משתנים • שם המועמד, עצם מהמחלקה מחרוזת – name • השם התורן מהקלט, עצם מהמחלקה מחרוזת – str • למניית מספר המחרוזות, מטיפוס שלם – counter
האלגוריתם • אתחל את counter ב- 1 • קלוט מחרוזת ב –name • הגדל את ערכו counter של ב- 1 • קלוט מחרוזת ב- str • כל עוד (בסדר מילוני ) בצע : • קלוט מחרוזת ב- str • אם name=str • הצג כפלט "המועמד <name> התקבל " • אחרת • הצג כפלט "המועמד <name> לא התקבל" • הצג את ערכו של counter
יישום האלגוריתם • כיצד נבדוק אם שם המועמד גדול על- פי סדר מילוני מהמחרוזת הנקלטת? • כיצד נבדוק אם המחרוזת האחרונה שנקלטה שווה לשם המועמד? שימו♥ את המונה נאתחל ב 1- כיוון שמחוץ ללולאה אנו קולטים את השם הראשון שנקרא.
using System; • public class NameFinder • { • public static void Main () • { • הגדרת משתנים ואתחולם // • string name; • string str; • intcounter = 1; • קלט שם מבוקש // • Console.Write("Enter the candidate name: "); • name = Console.ReadLine(); • לולאת זקיף // • Console.Write("Enter first winner name: "); • str = Console.ReadLine(); • כל עוד לא עברנו את שם המועמד //
while (name.CompareTo(str) > 0 || str.equals(“*”) { counter++; Console.Write("Enter next winner name: "); str = Console.ReadLine(); }// while if (name == str) Console.WriteLine(name + " is accepted"); Else Console.WriteLine(name +" is not accepted"); Console.WriteLine("{0} Names", counter); } } class NameFinder
שאלות הרחבה • פתח ויישם פתרון לשאלה באמצעות שימוש במערכים . • כתוב פעולה שתקלוט שמות ותאחסן אותם במערך String , הפעולה תחזיר את מערך השמות , הנח שהמערך ממויין • כתוב פעולה שתקלוט שמות של הזוכים באופן לא ממוין ותאחסן אותם במערך String , הפעולה תחזיר את מערך השמות , הנח שהמערך לא ממויין
using System; • public class NameFinder • { • public static void Main () • { • הגדרת משתנים ואתחולם // • string name; • String[] str = Winners(3); • intcounter = 1; • קלט שם מבוקש // • Console.Write("Enter the candidate name: "); • name = Console.ReadLine(); • לולאת זקיף //
booleanfound_Flag=false; • for(inti=[str.GetLength()]; i--; i> =1;) • { • if((name.CompareTo(str[i]) <0 && (name.CompareTo(str[i-1]>0))) • //if the last winners name is bigger then mine and the one before is //lower then mine – this means that I wasn’t accepted • { Console.WriteLine(name +" is not accepted"); • break; • } • Else if (((name.CompareTo(str[i]) ==0 ) • {Console.WriteLine(name + " is accepted"); • Counter=str.GetLength()+1; • } • }// for • if (found_Flag==false) • Counter=str.GetLength(); • Console.WriteLine("{0} Names", counter); • } • class NameFinder
String [] Winners(intNumberOfWinners ){ • String [] Winners= new String [NumberOfWinners]; • For ( int u =1 ; i<= Winners.getLength; i++){ • Console.Write("Enter the candidate name: "); • Winners[i] = Console.ReadLine();} • rerutn Winners; • }