7 מחרוזות

27
1 שיעור שביעי: מחרוזותonline.shenkar.ac.il/moodle online.shenkar.ac.il/moodle http:// http:// קורס מבוא למדעי המחשב קורס מבוא למדעי המחשב סמסטר א סמסטר א' ' תשס תשס" ח תזכורת תזכורת: : מערכים מערכים עד עכשיו הגדרנו כל משתנה בנפרד עד עכשיו הגדרנו כל משתנה בנפרד, , רק עם מספר קטן ויכולנו לעבוד כך רק עם מספר קטן ויכולנו לעבוד כך של משתנים של משתנים. . אפשר להגדיר קבוצה של כמה משתנים מאותו סוג בבת אחת אפשר להגדיר קבוצה של כמה משתנים מאותו סוג בבת אחת. . קבוצה כזאת קבוצה כזאת נקראת נקראת" מערך מערך." ." גודל המערך נרשם בהגדרה שלו גודל המערך נרשם בהגדרה שלו. . למשל למשל: int int A[10]; A[10]; לכל אחד מהמשתנים במערך יש מספר סידורי לכל אחד מהמשתנים במערך יש מספר סידורי, , החל מ החל מ- 0 . . ההתייחסות אל ההתייחסות אל כל משתנה היא על כל משתנה היא על- ידי שם המערך והמספר הסידורי של המשתנה ידי שם המערך והמספר הסידורי של המשתנה) בתוך בתוך סוגריים מרובעים סוגריים מרובעים.( .( למשל למשל: A[0]=9; A[0]=9; A[0] A[9] . 9 . . . . . . . .

Upload: yosef-joron

Post on 22-Mar-2016

216 views

Category:

Documents


1 download

DESCRIPTION

C LAN, C LANG

TRANSCRIPT

Page 1: 7 מחרוזות

1

מחרוזות : שיע ור שביע י

online.shenkar.ac.il/moodleonline.shenkar.ac.il/moodlehttp://http://

קורס מבוא למדעי המחשבקורס מבוא למדעי המחשב

חח""תש סתש ס' ' סמסטר אסמסטר א

מערכיםמערכים: : תז כו רתתז כו רת

ויכו לנ ו לעבוד כך רק עם מספר קטן ויכו לנ ו לעבוד כך רק עם מספר קטן , , עד עכשיו הגדרנ ו כל משתנ ה בנפרדעד עכשיו הגדרנ ו כל משתנ ה בנפרד••. . של משתניםשל משתנים

קבוצה כזאת קבוצה כזאת . . אפשר להגדיר קב וצה של כ מה משתנים מאות ו סוג בב ת אחתאפשר להגדיר קב וצה של כ מה משתנים מאות ו סוג בב ת אחת••::למשללמשל. . גודל המערך נרשם בהגדרה של ו גודל המערך נרשם בהגדרה של ו".".מערךמערך""נקראת נקראת

intint A[10];A[10];

ההתייחס ות אל ההתייחס ות אל . . 00--החל מהחל מ, , לכל אחד מהמשתנ ים במע רך יש מספר סידורילכל אחד מהמשתנ ים במע רך יש מספר סידורי••בתוך בתוך ((ידי שם המערך והמספר הס ידור י של המשתנ ה ידי שם המערך והמספר הס ידור י של המשתנ ה --כל משתנה ה יא על כל משתנה ה יא על ::למשללמשל). ). סוגרי ים מרובע יםסוגרי ים מרובע ים

A[0]=9;A[0]=9;

A[0] A[9]

.9 . . . . . . . .

Page 2: 7 מחרוזות

2

תז כו רתתז כו רת: : מערכיםמערכים

למשל למשל ( (הר בה נתו נ ים מאותו ס וגהר בה נתו נ ים מאותו ס וגמערכים שימ ושי ים כשצריך לשמור בזיכר ון מערכים שימ ושי ים כשצריך לשמור בזיכר ון ••מ של כל חייל מ של כל חייל ""הפזהפז, , ציונים של כל הת למיד ים ציונים של כל הת למיד ים , , שכר של כל אחד מהע ובדי םשכר של כל אחד מהע ובדי ם

). ). ''וכו וכו

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

. . והחי שוב ים ולבצע א ותן בא מצעות הלו לאה על כ ל אחד מהמשתניםוהחי שוב ים ולבצע א ותן בא מצעות הלו לאה על כ ל אחד מהמשתנים

דוגמאדוגמא: : הדפס ת מספרים ב ס דר הפוך הדפס ת מספרים ב ס דר הפוך

#include<#include<iostream.hiostream.h>>

intint main()main()

{{

intint i,i, input[10];input[10];

coutcout << "Enter the 10 integers:<< "Enter the 10 integers:\\nn””;;

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

cincin >> >> input[iinput[i]];;

for (i=9; i>=0; ifor (i=9; i>=0; i----))

coutcout << << input[iinput[i]];;

}}

10הגדרת מערך בגודל

קלט לתאי המערך

הדפסה בסדר הפוך

מספרים 10התוכ נית ק ולטת

ומדפיסה א ותם בסדר הפו ך

Page 3: 7 מחרוזות

3

דוגמאדוגמא: : מה עו שה התוכנית הבאה מה עו שה התוכנית הבאה ? ? #include<#include<iostream.hiostream.h>>

intint main()main()

{ {

intint i;i;

double scores[10],double scores[10], average, sum=0;average, sum=0;

coutcout << "Enter the 10 scores:<< "Enter the 10 scores:\\nn””;;

for (i=0; i<for (i=0; i<110; i++)0; i++)

{{

cincin >> >> scores[iscores[i]];;

sum = sum + sum = sum + scores[i];scores[i];

}}

average=sum/10;average=sum/10;

for (i=0; i<for (i=0; i<110; i++)0; i++)

if (if (scores[i]scores[i] > average)> average)

coutcout << i << << i << endlendl;;

}}

דוגמאדוגמא::ה דפסת התוצאות שמ על הממוצע ה דפסת התוצאות שמ על הממוצע #include<#include<iostream.hiostream.h>>

intint main()main()

{ {

intint i;i;

double scores[10],double scores[10], average, sum=0;average, sum=0;

coutcout << "Enter the 10 scores:<< "Enter the 10 scores:\\nn””;;

for (i=0; i<for (i=0; i<110; i++)0; i++)

{{

cincin >> >> scores[iscores[i]];;

sum = sum + sum = sum + scores[i];scores[i];

}}

average=sum/10;average=sum/10;

for (i=0; i<for (i=0; i<110; i++)0; i++)

if (if (scores[i]scores[i] > average)> average)

coutcout<<"Score number "<<i<<" is above average<<"Score number "<<i<<" is above average\\n";n";

}}

הדפסת מה שמעל הממוצ ע

קלט וחיש וב הסכ ום

10הגדרת מערך בגודל

חישוב הממ וצע

Page 4: 7 מחרוזות

4

מערכים מערכים איתח ולאיתח ול: : תזכורתתזכורת. . גם מערכים אפשר לאתחל כ שמגדירים א ותםגם מערכים אפשר לאתחל כ שמגדירים א ותם, , בדומה למשת נים אחריםבדומה למשת נים אחרים••

המערך מקבל י ם ערך התחלתי המערך מקבל י ם ערך התחלתי ) ) משתנ ימשתנ י((לפני שת אי לפני שת אי , , כמו בכל משתנ הכמו בכל משתנ ה••..הערכים ש להם לא מוגדר י םהערכים ש להם לא מוגדר י ם

) ) לפ י הסדרלפ י הסדר((אפשר לתת רשימה של ער כים התחלת יים לכ ל אחד מהתאים אפשר לתת רשימה של ער כים התחלת יים לכ ל אחד מהתאים ••..כשמגדיר ים את המערךכשמגדיר ים את המערך

intint days_in_month[12]={31,28,31,30,31,30,31,31,30,31,30,31};days_in_month[12]={31,28,31,30,31,30,31,31,30,31,30,31};

. . האי תחו להאי תחו לאז הוא נקבע לפי מס פר ערכי אז הוא נקבע לפי מס פר ערכי , , אם גודל המע רך שמאתח לים לא רשוםאם גודל המע רך שמאתח לים לא רשום••: : הפקודה הבאה שקולה לקודמ תהפקודה הבאה שקולה לקודמ ת

intint days_in_month[]={31,28,31,30,31,30,31,31,30,31,30,31};days_in_month[]={31,28,31,30,31,30,31,31,30,31,30,31};

זה נותן דרך נ וחה זה נותן דרך נ וחה ((אז שאר התאים מקבל ים ערך אפס אז שאר התאים מקבל ים ערך אפס , , אם הרשימה חלק יתאם הרשימה חלק ית••). ). באית חולבאית חוללאפס את כל התא ים לאפס את כל התא ים

intint counters[10]={0};counters[10]={0};

אין גיש ה לכל המערך בבת אין גיש ה לכל המערך בבת --אחתאחת

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

::אחתאחת--אפשר לשים ערכים בתאי המערך בבתאפשר לשים ערכים בתאי המערך בבת--איאי••וצריך לעשות זאת וצריך לעשות זאת , , אחת את כל התא יםאחת את כל התא ים--אפשר לאפס בבתאפשר לאפס בבת--למשל אי למשל אי ••

: : י לולאהי לולאה""עע

•• for(i=0; i<10; i++) A[i]=0; for(i=0; i<10; i++) A[i]=0; A=0A=0

==י פעולת י פעולת ""אפשר להעתיק מערך אחד למערך אחר עאפשר להעתיק מערך אחד למערך אחר ע--איאי••: : זה דורש לו לאהזה דורש לו לאה••

•• for(i=0; i<10; i++) A[i]=B[i]; for(i=0; i<10; i++) A[i]=B[i]; A=BA=B

דרושה דרושה ((' ' וכווכו, , קלטקלט, , הדפסההדפסה, , השוואההשוואהכך גם לגבי פעולות כך גם לגבי פעולות ••). ). לולאהלולאה

Page 5: 7 מחרוזות

5

חריגה מג בולו ת המערך חריגה מג בולו ת המערך

בסבירות בסבירות , , אם נכתוב לתא במערך מעבר לגודל שהוגדר אם נכתוב לתא במערך מעבר לגודל שהוגדר

".".תעוףתעוף""והתוכנית והתוכנית , , גבוהה יפגעו נתונים של תוכנות אחרותגבוהה יפגעו נתונים של תוכנות אחרות

::למשללמשל

intint a[10];a[10];

a[10]=0;a[10]=0;

a[a[--1]=5;1]=5;

הגדרה וגי שה הגדרה וגי שה : : תזכורת מער כי םתזכורת מער כי ם

??שאלותשאלות

Page 6: 7 מחרוזות

6

העברת מער ך לפונקציההעברת מער ך לפונקציה

אבל אפשר להעב יר אבל אפשר להעב יר , , אחתאחת--אמרנו שא ין דרך לבצע פעו לות על מערך בבת אמרנו שא ין דרך לבצע פעו לות על מערך בבת ••. . את כל המערך לפונ קציהאת כל המערך לפונ קציה

כדי שהפונקצ יה תדע כדי שהפונקצ יה תדע , , כלל נעבי ר לפונקצ יה גם את גודל המערךכלל נעבי ר לפונקצ יה גם את גודל המערך--בדרךבדרך••..לא לחרוג מהג ודל של ולא לחרוג מהג ודל של ו

::למשללמשל••

sum=sum=calc_sum(array, size);calc_sum(array, size);

לא מוע תק לא מוע תק כשמעביר ים מערך לפונקצ י ה הוא כשמעביר ים מערך לפונקצ י ה הוא , , בשונ ה ממשתנים אחר יםבשונ ה ממשתנים אחר ים••הפונקצי ה עובדת הפונקצי ה עובדת . . המערך המ קו ריהמערך המ קו ריכל ומר לפונ קציה מועבר כל ומר לפונ קציה מועבר , , למשתנה חדשלמשתנה חדש

..אפיל ו אם יש לו שם אחראפיל ו אם יש לו שם אחר, , אותו מערךאותו מערךעל על

כי הוא לא מוגדר כי הוא לא מוגדר , , בכותרת הפונקציה בכותרת הפונקציה [ ] [ ] --לכן א ין צורך לצי ין ג ודל מע רך בלכן א ין צורך לצי ין ג ודל מע רך ב••::מחדשמחדש

intint calc_sum(intcalc_sum(int array[], array[], intint size);size);

דוגמאדוגמא::פונקצי ה פונקצי ה שסוכ מתשסוכ מת מע רך של שלמים מע רך של שלמים #include <#include <iostream.hiostream.h>>

intint calc_sum(intcalc_sum(int arrarr[], [], intint size) size)

{{

intint i, sum = 0;i, sum = 0;

for(i=0; i<size; i++) sum=for(i=0; i<size; i++) sum=sum+arr[isum+arr[i];];

return sum;return sum;

}}

intint main()main()

{{

intint input[10], i;input[10], i;

for(i=0; i<10; i++) for(i=0; i<10; i++) cincin >> >> input[iinput[i];];

coutcout << "The sum is " << << "The sum is " << calc_sum(input, 10)calc_sum(input, 10);;

return 0;return 0;

}}

קריאה לפ ונקצ יה

הסכ ום פונקצי ית

קליטת המערך

Page 7: 7 מחרוזות

7

העברת מער ך לפונקציההעברת מער ך לפונקציה

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

ישנו את המערך ישנו את המערך שינויים של המערך בפונקציה שינויים של המערך בפונקציה , , מעתיקה אותומעתיקה אותו

.. במקום שממנו הקריאה בוצעה במקום שממנו הקריאה בוצעההמקוריהמקורי

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

בשיעו ר הבא נדבר י ותר על הנו שא של בשיעו ר הבא נדבר י ותר על הנו שא של ((של המערך המקור י בזי כרו ן של המערך המקור י בזי כרו ן

).).כתוב ות של משתנ יםכתוב ות של משתנ ים

דוגמאדוגמא: : פונקצי ה שמאפסת מ ערךפונקצי ה שמאפסת מ ערך#include <#include <iostream.hiostream.h>>

void void zero_array(intzero_array(int arrarr[], [], intint size) size)

{{

intint i;i;

for(i=0; i<size; i++) for(i=0; i<size; i++) arr[iarr[i]=0;]=0;

}}

intint main()main()

{{

intint A[10], i;A[10], i;

zero_array(A,10);zero_array(A,10);

for(i=0; i<10; i++) for(i=0; i<10; i++) coutcout << << A[iA[i];];

return 0;return 0;

}}

קריאה לפ ונקצ יה

האיפ וס פונקצי ית

יודפסו אפס ים

Page 8: 7 מחרוזות

8

נקודה לתשומ תנקודה לתשומ ת--לבלב: : מערך ק בוע מערך ק בוע לפונקציה שבה לפונקציה שבה ) ) constconst((כקבוע כקבוע אפשר להעביר מערך שהוגדר אפשר להעביר מערך שהוגדר --איאי••

למשל לא נוכל להשתמש למשל לא נוכל להשתמש . . הוא לא קבוע ועלול להשתנותהוא לא קבוע ועלול להשתנות

:: מהשקף הקודם במקרה הבא מהשקף הקודם במקרה הבאzero_arrayzero_arrayבפונקציה בפונקציה

intint main()main()

{{

constconst intint A[10]={1,1,2,3,5,8,13,21,34,55};A[10]={1,1,2,3,5,8,13,21,34,55};

intint i;i;

zero_array(A,10);zero_array(A,10);

return 0;return 0;

}}

, ערכי המערך ה וגדרו כק בוע ים

ולכ ן לא נית ן להע ביר או תו

לפונקצ יה שבה הם ל א יה יו

קבועים

העברת מער ך קבוע לפונקציההעברת מער ך קבוע לפונקציה

ימשיך ימשיך נוכל להעביר מערך קבוע רק לפונקציה שבתוכה הוא נוכל להעביר מערך קבוע רק לפונקציה שבתוכה הוא ••

).).constconst((להיות מוגדר כקבוע להיות מוגדר כקבוע

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

ואז נוכל להעביר אליה גם מערכים ואז נוכל להעביר אליה גם מערכים , , המערך שמתקבל כקבועהמערך שמתקבל כקבוע

::קבועיםקבועים

void print_array(void print_array(constconst intint array[ ],array[ ], size)size)

{{

intint i;i;

for(i=0; i<size; i++) for(i=0; i<size; i++) coutcout << << array[iarray[i];];

}}

Page 9: 7 מחרוזות

9

סי כום סי כום --העברת מער ך לפונקציה העברת מער ך לפונקציה

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

שינוי המערך בפונקציה ישנה את המערך המקורי•

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

? שאלות•

תזכורתתזכורת: : מער כ ים רב מער כ ים רב --מימד יים מימד יים

. . או מערכים ממימדים גבוה ים יותראו מערכים ממימדים גבוה ים יותר, , ל ייצג מטרי צות ל ייצג מטרי צותנירצהנירצהלפעמים לפעמים ••

: : ידיידי--נוכ ל להגד יר מערכים כא לה למשל על נוכ ל להגד יר מערכים כא לה למשל על ••

intint a[10][100];a[10][100];

.. של מספרים שלמים של מספרים שלמים100100 מערכים בגודל מערכים בגודל 1010המשמעות ה יא שהגדר נו המשמעות ה יא שהגדר נו ••

::למשללמשל, , י שני אי נדקס יםי שני אי נדקס ים""ואז נו כל לגשת ל כל תא עואז נו כל לגשת ל כל תא ע••

a[5][8]=4;a[5][8]=4;

Page 10: 7 מחרוזות

10

איתחו לאיתחו ל -- מי מדייםמי מדיים--מערכים ר ב מערכים ר ב

..מימדימימדי--ניתן לתת ערכים התחלתיים גם כשמגדירים מערך רבניתן לתת ערכים התחלתיים גם כשמגדירים מערך רב••

ומעבירים ומעבירים , , מימדייםמימדיים--מתייחסים אליו כאל מערך של מערכים חדמתייחסים אליו כאל מערך של מערכים חד••

::למשללמשל. . לכל אחד מהם לכל אחד מהםאיתחולאיתחולערכי ערכי

intint my_matrix[3][2]={ {1,0}, {0,1}, {1,1}my_matrix[3][2]={ {1,0}, {0,1}, {1,1} };};

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

).). לכתוב את ערכי כולם לכתוב את ערכי כולםנירצהנירצהתאים לא תאים לא

מימ ד ימימ ד י--א יפוס מערך דו א יפוס מערך דו : : דוגמאדוגמא

void void zero_array(zero_array(intint a[100][a[100][100100]]))

{{

intint i ,j;i ,j;

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

for(j=0; j<100; j++)for(j=0; j<100; j++)

a[ i ][ j ] = a[ i ][ j ] = 00;;

}}זה משנה גם את , כאמור

המערך המקור י ולא רק בת וך

הפונקצ יה

מותר לא לרשום את המ ימ ד

הראשו ן בסו גרי ים המרובע י ם

אב ל , )כמו במערכ ים רגיל ים(

חייב ים לרשום גוד ל בסוגר יי ם

. השנ יים

Page 11: 7 מחרוזות

11

מימ ד ימימ ד י--א יפוס מערך דו א יפוס מערך דו : : דוגמאדוגמא

void void zero_array(zero_array(intint a[a[ ][][100100], ], intint size1)size1)

{{

intint i ,j;i ,j;

for(i=0; i<size1; i++)for(i=0; i<size1; i++)

for(j=0; j<for(j=0; j<100100; j++); j++)

a[ i ][ j ] = a[ i ][ j ] = 00;;

}}זה משנה גם את , כאמור

המערך המקור י ולא רק בת וך

הפונקצ יה

מותר לא לרשום את המ ימ ד

הראשו ן בסו גרי ים המרובע י ם

אב ל , )כמו במערכ ים רגיל ים(

חייב ים לרשום גוד ל בסוגר יי ם

. השנ יים

? ? מה עו שה הפונקציה הבאה מה עו שה הפונקציה הבאה : : דוגמאדוגמא

intint func(intfunc(int a[10][10], a[10][10], intint b[10][10])b[10][10])

{{

intint i, j, identical=1;i, j, identical=1;

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

for(j=0; j<10; j++)for(j=0; j<10; j++)

if (a[ i ][ j ] != b[ i ][ j ])if (a[ i ][ j ] != b[ i ][ j ])

identical=0;identical=0;

return identical;return identical;

}}

Page 12: 7 מחרוזות

12

מימד יים מימד יים --השווא ת מערכים דו השווא ת מערכים דו : : דוגמאדוגמא

intint compare_arrays10(int a[10][10], compare_arrays10(int a[10][10], intint b[10][10])b[10][10])

{{

intint i, j, identical=1;i, j, identical=1;

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

for(j=0; j<10; j++)for(j=0; j<10; j++)

if (a[ i ][ j ] != b[ i ][ j ])if (a[ i ][ j ] != b[ i ][ j ])

identical=0;identical=0;

return identical;return identical;

}}

10 על 10 בגודל מימדי ים-משוו ה בין הת וכ ן של שנ י מערכים דו

0 אם הם זהים וא חרת 1ומחזירה

מי מדיים מי מדיים --מערכים ר ב מערכים ר ב

??שאלותשאלות

Page 13: 7 מחרוזות

13

שימ וש במע רכים למחרוזות

מחרוזות מחרוזות

למשל מילה או למשל מילה או ((היא רצף תווים בעל משמעות כלשהי היא רצף תווים בעל משמעות כלשהי מחרוזתמחרוזת••

). ). משפטמשפט

. . במערך של תוויםבמערך של תוויםלשמירת מחרוזת בזיכרון נשתמש באופן טבעי לשמירת מחרוזת בזיכרון נשתמש באופן טבעי ••

;char word[20];char word[20]: : למשללמשל

ולא רק ולא רק , , אחתאחת--אבל בהרב ה מקרים נרצה להתי יחס אל מחרוזת בבת אבל בהרב ה מקרים נרצה להתי יחס אל מחרוזת בבת ••

). ). תותו--אחת ולא תו אחת ולא תו --למש ל לקלוט מיל ה בבת למש ל לקלוט מיל ה בבת ((כמערך של תוו ים כמערך של תוו ים

יתכן ש נקבל יתכן ש נקבל ( ( במקרים רבים אורך המחרוזת לא ידוע מראש במקרים רבים אורך המחרוזת לא ידוע מראש , , כןכן--כמו כמו ••

). ). מהקלט מילה קצר ה יותר מ גודל המערךמהקלט מילה קצר ה יותר מ גודל המערך

ספריה שכבר נכתבו במיוחד לצורך ספריה שכבר נכתבו במיוחד לצורך --נכיר היום פקודות ופונקציותנכיר היום פקודות ופונקציות••

..ומאפשרות להתגבר על הבעיות האלהומאפשרות להתגבר על הבעיות האלה, , עבודה עם מחרוזותעבודה עם מחרוזות

Page 14: 7 מחרוזות

14

אי תחולאי תחול ––מחרוזות מחרוזות

יש דרך יותר טבעית לאתחל מערך שמייצג מחרוזת יש דרך יותר טבעית לאתחל מערך שמייצג מחרוזת , , לדוגמאלדוגמא••

):):במקום לרשום את התווים מופרדים בפסיקיםבמקום לרשום את התווים מופרדים בפסיקים((

char message[ ]=char message[ ]=""Hello world!";Hello world!";

char A[10 ]=char A[10 ]=""Hello";Hello";

ולא בגרשיים ולא בגרשיים ,,בגרשיים כפוליםבגרשיים כפוליםשימו לב שמשתמשים כאן שימו לב שמשתמשים כאן ••

.. כמו שעשינו עבור תו בודד כמו שעשינו עבור תו בודדבודדיםבודדים

). ). י גרשיים כפול יםי גרשיים כפול ים"" מחר וזת קבוע ה נעשה תמיד ע מחר וזת קבוע ה נעשה תמיד עש יצוגש יצוגניר אה בהמשך ניר אה בהמשך ((••

נושאים נושאים--מחרוזות מחרוזות

..ואיתחולואיתחולהגדרה הגדרה ••

..סימון סוף המחרוז ת סימון סוף המחרוז ת ••

. . פל ט של מחרוז ותפל ט של מחרוז ות//קלטקלט••

..פעולות על מחרוזות פעולות על מחרוזות ••

Page 15: 7 מחרוזות

15

סימו ן סוף ה מ חרוזתסימו ן סוף ה מ חרוזת

שלפיה אחרי שלפיה אחרי מוסכמהמוסכמהאז יש אז יש , , אם מערך של תווים מייצג מחרוזתאם מערך של תווים מייצג מחרוזת••

..)) בטבלה בטבלה00זהו התו במקום זהו התו במקום ( (’’00\\‘‘התו התו מופיעמופיעתווי המחרוזת תווי המחרוזת

זה מאפשר לעשות פעולות על מחרוזת זה מאפשר לעשות פעולות על מחרוזת , , כפי שניראה בהמשךכפי שניראה בהמשך••

ברגע שמגיעים לתו הזה מבינים ברגע שמגיעים לתו הזה מבינים ( (בלי לדעת מראש את אורכהבלי לדעת מראש את אורכה

). ). שהמחרוזת הסתיימהשהמחרוזת הסתיימה

..זו המוסכמה בכל הפקודות והפעולות הקיימות לגבי מחרוזותזו המוסכמה בכל הפקודות והפעולות הקיימות לגבי מחרוזות••

A[0] A[9]

.‘H’ .. .‘E’ ‘L’ ‘L’ ‘O’ ‘\0’

סי מון ס וף המחר וזת סי מון ס וף המחר וזת––מחרוזות מחרוזות כל הפעולות שנכיר על מחרוזות דואגות בעצמן לשמירת כל הפעולות שנכיר על מחרוזות דואגות בעצמן לשמירת ••

..המוסכמה הזו של תו הסיוםהמוסכמה הזו של תו הסיום

:: הזו הזוהאיתחולהאיתחוללמשל פעולת למשל פעולת ••

char word[]=char word[]=““HELLOHELLO””;;

:: הזו הזוהאיתחולהאיתחול שקולה לפעולת שקולה לפעולת

char word[]={char word[]={‘‘HH’’,,’’EE’’,,’’LL’’,,’’LL’’,,’’OO’’,,’’\\00’’};};

).). תווים תווים66 דורשת מערך של דורשת מערך של 55כלומר מחרוזת באורך כלומר מחרוזת באורך ((••

word[0]

.‘H’ .. .‘E’ ‘L’ ‘L’ ‘O’ ‘\0’

word[9]

Page 16: 7 מחרוזות

16

תו סיום תו סיום ––מחרוזות מחרוזות

להפעיל להפעיל ונירצהונירצה, , אם יהיה לנו מערך של תווים בלי תו הסיוםאם יהיה לנו מערך של תווים בלי תו הסיום••אז נצטרך להוסיף אז נצטרך להוסיף , , ))שנכיר בהמשךשנכיר בהמשך((עליו פעולות על מחרוזות עליו פעולות על מחרוזות

.. בסוף המחרוזת בסוף המחרוזת''\\00''את התו את התו

להשתמש בפעולות על מחרוזות עבור להשתמש בפעולות על מחרוזות עבור נירצהנירצהלמשל אם למשל אם ••::המערךהמערך

char word[6]={char word[6]={‘‘HH’’,,’’EE’’,,’’LL’’,,’’LL’’,,’’OO’’};};

::אז נצטרך לכתובאז נצטרך לכתוב••

word[5]=word[5]=‘‘\\00’’;;

דוגמאדוגמא: : מה עו שה הפונקציה הבאה מה עו שה הפונקציה הבאה ? ?

intint func(charfunc(char strstr[])[])

{{

intint i=0;i=0;

while (while (strstr[ i ] != [ i ] != ‘‘\\00’’))

i++;i++;

return i;return i;

}}

Page 17: 7 מחרוזות

17

דוגמאדוגמא: : מציאת אורך מח רוזת מציאת אורך מח רוזת

, , הפונקציה הבאה מקבלת מחרוזת ומחזירה את האורך שלההפונקציה הבאה מקבלת מחרוזת ומחזירה את האורך שלה••.. בסוף המחרוזת בסוף המחרוזת''\\00''בהסתמך על כך שיש תו בהסתמך על כך שיש תו

intint my_strlenmy_strlen (char (char strstr[])[])

{{

intint i=0;i=0;

while (while (strstr[ i ] != [ i ] != ‘‘\\00’’))

i++;i++;

return i;return i;

}}

הגדרה•

איתחול •

תו סיום•

? שאלות•

מחרוזות

Page 18: 7 מחרוזות

18

קלטקלט//פלט של מחרוזות פלט של מחרוזות cin.getcin.getאפשר לקלוט ו להדפיס את תוו י המחרוזת בזה אחר ז ה בעזרת אפשר לקלוט ו להדפיס את תוו י המחרוזת בזה אחר ז ה בעזרת ••

). ). stdio.hstdio.h המוגדרות בספריי ה המוגדרות בספריי ה putcharputchar--וו getchargetcharאו בעזרת או בעזרת ( (cin.putcin.put--וו

ומפסיק אם ומפסיק אם , , תווים לכל הי ותר תווים לכל הי ותר200200הקטע הבא ק ולט משפט באורך הקטע הבא ק ולט משפט באורך , , לדוגמאלדוגמא••): ): כ אן י רידת השור ה נכ ללת במחר וזתכ אן י רידת השור ה נכ ללת במחר וזת((שורה שורה --נקלטת יר ידת נקלטת יר ידת

char answer[2char answer[20101];];

intint i=0;i=0;

dodo

{{

cin.get(answer[icin.get(answer[i]);]);

i++;i++;

} while ((answer[i} while ((answer[i--1]!='1]!='\\n') && (i<2n') && (i<20000));));

answer[ianswer[i]=']='\\0';0';

)'\0 '-צריך מקום גם ל(

התנא י להמשך הק לט

סימו ן סיום המחר וזת

קלטקלט//פלט של מחרוזת שלמ הפלט של מחרוזת שלמ ה

cincin, , coutcout -- ב באחתאחת--בבתבבתאפשר גם לקלוט ולהדפיס מחרוזות אפשר גם לקלוט ולהדפיס מחרוזות ••

::למשללמשל). ). s%s% באמצעות הקידוד באמצעות הקידודscanfscanf, , printfprintf --וגם בוגם ב((

char answer[char answer[100100];];

cincin >> answer; >> answer; /*/*scanf(scanf(““%s%s””, answer);*/, answer);*/

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

אחרי תוו י המחרוזת אחרי תוו י המחרוזת cincin ((scanfscanf)) --י הי ה"" מוכנס אוטומט ית ע מוכנס אוטומט ית ע’’00\\‘‘התו התו ••

..שנקלט השנקלט ה

Page 19: 7 מחרוזות

19

התווים התווים ' ' מס מס––קלט של מחרו זת שלמה קלט של מחרו זת שלמה

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

). ). גם שצריך להש איר מקום אחד לתו הס יום גם שצריך להש איר מקום אחד לתו הס יוםזיכר וזיכר ו((

--אם רוצים להגב יל את מספר התוו ים שיקלט ו אז אפשר לכתוב את זה ב אם רוצים להגב יל את מספר התוו ים שיקלט ו אז אפשר לכתוב את זה ב ••cin.widthcin.width . .למשללמשל::

cin.widthcin.width((4040););

cincin >> answer;>> answer;

/*/*scanfscanf((““%%4040ss””, answer);*/, answer);*/

תו כמו תו כמו --דרך אחרת להגבלת מספר התוו ים היא לע שות ל ולא ה ולקלוט תו דרך אחרת להגבלת מספר התוו ים היא לע שות ל ולא ה ולקלוט תו ••).).אז ה קלט לא נפסק כשמגיע ים לרווח אז ה קלט לא נפסק כשמגיע ים לרווח ((שראינ ו קודם שראינ ו קודם

פלט של מחרו זת שלמה פלט של מחרו זת שלמה

••coutcout << answer<< answer מדפיס את תווי המחר וזת מדפיס את תווי המחר וזת answeranswer 00'' עד לתו עד לתו\\'' . .

HELLOHELLO

ידפיס גם את מה שיש ידפיס גם את מה שיש coutcoutאז אז , , בסוף המחרוזת בסוף המחרוזת''\\00''אם בטעות אין תו אם בטעות אין תו ••

כלומר י ודפס אחרי כלומר י ודפס אחרי ( (’’00\\‘‘עד שיגיע במקרה לת ו עד שיגיע במקרה לת ו , , אחרי המחרוזת בזי כרו ןאחרי המחרוזת בזי כרו ן

: : למשללמשל). ). המחרוזת רצף סתמי ארוך של תוו יםהמחרוזת רצף סתמי ארוך של תוו ים

HELLO3894o9fhsdughw34oruvhjnxuioghyw89tpcvjHELLO3894o9fhsdughw34oruvhjnxuioghyw89tpcvj

Page 20: 7 מחרוזות

20

פלט של מחרוזות פלט של מחרוזות //עוד אפשרות ל קלטעוד אפשרות ל קלט

.. שקורא גם רווחים שקורא גם רווחים;gets(strgets(str);): : יש פקודת קלט נוספת למחרוזותיש פקודת קלט נוספת למחרוזות••

אז אם אז אם , , אבל בפקודה הזאת לא ניתן להגביל את אורך הקלטאבל בפקודה הזאת לא ניתן להגביל את אורך הקלט••

..""תעוףתעוף""המשתמש יכניס יותר מידי תווים התוכנית המשתמש יכניס יותר מידי תווים התוכנית

שפועלת כמו שפועלת כמו ;puts(strputs(str);) ::יש גם פקודת פלט נוספתיש גם פקודת פלט נוספת••

coutcout<<<<strstr<<<<endlendl) ) מדפיסה ירידת שורה אחרי המחרוזתמדפיסה ירידת שורה אחרי המחרוזת.(.(

..fputsfputs-- ו וfgetsfgetsכמו גם כמו גם ( (stdio.hstdio.hפונקצי ות אלו מו גדרות בספ רייה פונקצי ות אלו מו גדרות בספ רייה ••

תו בלולאה- קלט תו•

קלט של מחרוזת שלמה•

להימנע ממחרוזת ארוכה מידי•

? שאלות•

פלט של מחרוזות /קלט

Page 21: 7 מחרוזות

21

תוכנית שמרווחת מ יל התוכנית שמרווחת מ יל ה: : דוגמאדוגמא#include<#include<iostream.hiostream.h>>

intint main()main()

{{

char word[30], spaced_word[60];char word[30], spaced_word[60];

intint i=0;i=0;

cin.width(30);cin.width(30);

cincin >> word;>> word;

while (word[i] != while (word[i] != ‘‘\\00’’))

{{

spaced_word[spaced_word[ i*2i*2 ] = word[i];] = word[i];

spaced_word[spaced_word[ i*2+1i*2+1 ] = ] = ‘‘ ’’;;

i++;i++;

}}

spaced_word[i*2spaced_word[i*2--1] = 1] = ‘‘\\00’’ ;;

coutcout << "The word after spacing: " << << "The word after spacing: " << spaced_wordspaced_word;;

}}

HELLO עבור הק לט , לדוגמא

H E L L O הפלט יהי ה :

שמה רווח ים בין הא ותי ות של

ומדפיס ה את התוצא ה, מילה

‘H’ ‘E’ ‘L’ ‘L’ ‘O’ ‘\0’‘ ’ ‘ ’ ‘ ’ ‘ ’

.‘H’ .. .‘E’ ‘L’ ‘L’ ‘O’ ‘\0’

תוכנית שמרווחת מ יל התוכנית שמרווחת מ יל ה: : דוגמאדוגמא#include<#include<iostream.hiostream.h>>

intint main()main()

{{

char word[30], spaced_word[60];char word[30], spaced_word[60];

intint i=0;i=0;

cin.width(30);cin.width(30);

cincin >> word;>> word;

while (word[i] != while (word[i] != ‘‘\\00’’))

{{

spaced_word[spaced_word[ i*2i*2 ] = word[i];] = word[i];

spaced_word[spaced_word[ i*2+1i*2+1 ] = ] = ‘‘ ’’;;

i++;i++;

}}

spaced_word[i*2spaced_word[i*2--1] = 1] = ‘‘\\00’’ ;;

coutcout << "The word after spacing: " << << "The word after spacing: " << spaced_wordspaced_word;;

}}

כל עוד לא הגע נו ל סוף המ חרוזת

תווים 29קולטים מי לה עם עד

)' \0'צריך מקום לתו ה סי ום (

שמה רווח ים בין הא ותי ות של

ומדפיס ה את התוצא ה, מילה

מעתיקים או ת למחרוזת

החדשה ומ וסיפים אחר יה ר ווח

מסמנים את סוף המחרוזת החדשה

Page 22: 7 מחרוזות

22

משמעות•

סיום- תו•

איתחול•

פלט/ קלט•

?שאלות •

ביניים - סיכ ום-מחרוזות

פעולות על מחרוזות פעולות על מחרוזות

לבצע פעולות על מחרוזת שלמה כמו השוואה או לבצע פעולות על מחרוזת שלמה כמו השוואה או לא נוכללא נוכל••::השמה באופן רגילהשמה באופן רגיל

string1==string2string1==string2

string1=string2string1=string2

, , כת ובתה בזי כרו ןכת ובתה בזי כרו ןזה מכיו ון שכמ ו בכל מערך שם המחרוזת מכיל את זה מכיו ון שכמ ו בכל מערך שם המחרוזת מכיל את ••. . ו לא על תו כן המחרוזת ו לא על תו כן המחרוזתעל הכת ובותעל הכת ובותולכ ן גם הפעולות האל ה יבו צעו ולכ ן גם הפעולות האל ה יבו צעו

לביצוע פעולות על מחרוזות שלמות נוכל להשתמש בספריה לביצוע פעולות על מחרוזות שלמות נוכל להשתמש בספריה ••string.hstring.h , , העתקת העתקת , , מחרוזותמחרוזותהשוואת השוואת שכוללת פעולות כמו שכוללת פעולות כמו..ועודועוד, , ")")שירשורשירשור("("למחרוזת אחרת למחרוזת אחרת הוספת מחרוזת הוספת מחרוזת , , מחרוזותמחרוזות

Page 23: 7 מחרוזות

23

פונקציות לדוגמא פונקציות לדוגמא –– string.hstring.hהספריי ה הספריי ה

):):''\\00''לפי מקום התו לפי מקום התו ((מציאת אורך המחרוזת מציאת אורך המחרוזת ••

intint strlen(conststrlen(const char char strstr[ ]);[ ]);))''\\00''--האורך לא כ ולל את ה האורך לא כ ולל את ה ( (

::השוואת מחרוזותהשוואת מחרוזות••

intint strcmp(conststrcmp(const char str1[ ], const char str2[ ]);char str1[ ], const char str2[ ]);

לפי סדר לפי סדר ((לקסיקוגרפית לקסיקוגרפית היא מבצעת בין המחרוזות השוואה היא מבצעת בין המחרוזות השוואה

חיוביחיובי' ' מסמס, , אם הן שוותאם הן שוות 00ומחזירה ומחזירה , , ))האסקיהאסקי--סדר טבלתסדר טבלת, , מילונימילוני

.. אם השניה גדולה יותר אם השניה גדולה יותרשלילישלילי' ' מסמס, , אם הראשונה גדולה יותראם הראשונה גדולה יותר

string.hstring.h איך זה ממ ו מש איך זה ממ ו מש --

מבוסס פשוט על מעבר על המחרוזות בעזרת מבוסס פשוט על מעבר על המחרוזות בעזרת המימושהמימוש••. . בסוף כל מחרוזתבסוף כל מחרוזת' ' \\00''תוך הסתמכות על כך שיש תוך הסתמכות על כך שיש , , לולאותלולאות

::נדגים למשל השוואת מחרוזותנדגים למשל השוואת מחרוזות••

intint my_strcmp(charmy_strcmp(char str1[], char str2[])str1[], char str2[])

{{

intint i=0, same=0;i=0, same=0;

while while ( (str1[i] == str2[i]) && (str1[i] != ( (str1[i] == str2[i]) && (str1[i] != ‘‘\\00’’) ) ) ) i++;i++;

if (str1[i] < str2[i]) same=if (str1[i] < str2[i]) same=--1;1;

else if (str1[i] > str2[i]) same=1;else if (str1[i] > str2[i]) same=1;

return same;return same;

}}

Page 24: 7 מחרוזות

24

? ? מה עו שה התוכנית הבאה מה עו שה התוכנית הבאה : : דוגמאדוגמא#include<#include<iostream.hiostream.h>>

#include<string.h>#include<string.h>

intint main()main()

{{

intint bush_votes = 0 , bush_votes = 0 , kerry_voteskerry_votes=0; =0;

char vote[6];char vote[6];

while(1)while(1)

{{

cin.width(6); cin.width(6); cincin >> vote;>> vote;

if if ((strcmp(votestrcmp(vote, , ““BushBush””)==0))==0) bush_votes++;bush_votes++;

else if else if ((strcmp(votestrcmp(vote, , ““KerryKerry””)==0))==0) kerry_voteskerry_votes++;++;

else if else if ((strcmp(votestrcmp(vote, , ““StopStop””)==0))==0) break;break;

else else coutcout << "Wrong vote!<< "Wrong vote!\\n";n";

}}

coutcout <<<< "Bush received " << "Bush received " << bush_votesbush_votes

<<<< " votes and Kerry received "<<" votes and Kerry received "<<kerry_voteskerry_votes << " votes<< " votes\\nn””; ;

}}

עד , סופרת הצבעות לב וש ו לקר י

שאומרים ל ה לעצור

break י "הלולא ה נמשכת עד שנצא ע

לכל הי ותר 5קליטת מחרוזת באו רך

משתנים לספיר ת הקו לות

בודקים

איזה

מחרוזת

נקלטה

string.hstring.h דוגמאות נוס פות דוגמאות נוס פות-- ::ידיידי--העתקת מחרוזת למחרוזת אחרת תתבצע עלהעתקת מחרוזת למחרוזת אחרת תתבצע על••

strcpy(charstrcpy(char target [], const char source[]);target [], const char source[]);

):):str1str1 לסוף לסוף str2str2מעת יק את מעת יק את (( מחרוזות מחרוזות שירש ורשירש ור••

strcat(charstrcat(char str1[], const char str2[]);str1[], const char str2[]);

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

strchr(conststrchr(const char char strstr[], char c);[], char c);

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

strstr(conststrstr(const char char strstr[], const char find[]);[], const char find[]);

בעתיד נפרט יותר על ה שי מוש בפעול ות האל ה ועל פ עולו ת נוספו ת בספריה בעתיד נפרט יותר על ה שי מוש בפעול ות האל ה ועל פ עולו ת נוספו ת בספריה ••..הזאתהזאת

Page 25: 7 מחרוזות

25

עוד פעולות שי מושיות על מח רוזות עוד פעולות שי מושיות על מח רוזות מחרוזת למספרמחרוזת למספר יש פונקציות ל תרגום יש פונקציות ל תרגום stdlib.hstdlib.hבספריה בספריה ••

. . שלם או ממשישלם או ממשי

•• intint atoiatoi(const(const char char strstr[]);[]);

•• double double atofatof(const(const char char strstr[]);[]);

;num=atoi(num=atoi(““1234512345””);): : למשללמשל

ורוצים ורוצים כשמקבלים מהקלט מחרוזת שמכילה ספרותכשמקבלים מהקלט מחרוזת שמכילה ספרותזה שימושי זה שימושי ••..לקבל בתוך משתנה מספרי את המספרים שהספרות מייצגותלקבל בתוך משתנה מספרי את המספרים שהספרות מייצגות

באחריותנו באחריותנו (( התנהגותן לא מוגדרת התנהגותן לא מוגדרת ––אם התרגום לא אפשרי אם התרגום לא אפשרי ••).).לוודא שהן מקבלות מחרוזת תקינהלוודא שהן מקבלות מחרוזת תקינה

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

הפעולות שלה הפעולות שלה (( שימושית כשעובדים עם תווים שימושית כשעובדים עם תווים ctype.hctype.hהספריההספריה••::למשללמשל). ). אינן על מחרוזת שלמה אלא על תו בודדאינן על מחרוזת שלמה אלא על תו בודד

•• intint isalphaisalpha(char(char c); c);

•• intint islowerislower(char(char c);c);

•• intint isupperisupper(char(char c);c);

•• intint isdigitisdigit(char(char c);c);

•• char char tolowertolower(char(char c);c);

•• char char touppertoupper(char(char c);c);

וכך גם אם וכך גם אם , , לא מקבלת אות גדול ה אז היא לא מש נה אותה לא מקבלת אות גדול ה אז היא לא מש נה אותהtolowertolowerאם אם ((touppertoupperלא מקבלת אות קטנה לא מקבלת אות קטנה .( .(

. . זה שימושי לפעמ ים כשע ובדים עם מחרוזות זה שימושי לפעמ ים כשע ובדים עם מחרוזות--

)0אחרת ; אם כןtrue מוחזר(האם זו אות

)0אחרת ; אם כןtrue( האם זו אות קטנ ה

)0אחרת ; אם כןtrue( האם זו אות גדו לה

)0אחרת ; אם כןtrue( האם זו סיפרה

הופך אות גדו לה לא ות הק טנה המתאימ ה

הופך אות קטנ ה לאות הגד ו לה המתאימ ה

Page 26: 7 מחרוזות

26

נקודה לתשומ תנקודה לתשומ ת--לבלב: : הגרשיי םהגרשיי ם

’’aa‘‘: : למשללמשל. . גרש ב וד דתגרש ב וד דת ר ושמים אות ו בתוך ר ושמים אות ו בתוך מסו ייםמסו ייםכדי להת ייחס לת ו כדי להת ייחס לת ו ••

””HELLOHELLO““: : למשל למשל..גרשי ים כפול ים גרשי ים כפול ים כדי להת ייחס למחר וזת רו שמים בתוך כדי להת ייחס למחר וזת רו שמים בתוך ••

ואחריו ואחריו ’’aa‘‘ אז המשמעות היא מחרוזת ש יש בה את התו אז המשמעות היא מחרוזת ש יש בה את התו ””aa““אם רושמים אם רושמים ••

..’’aa‘‘כלומר זה שונ ה מאשר לרשום כלומר זה שונ ה מאשר לרשום . . ’’00\\‘‘את התו את התו

: : למשללמשל, , ג רשיים כפו ליםג רשיים כפו ליםאז כשעוש ים פעולו ת על מחרוזות צריך לה קפיד על אז כשעוש ים פעולו ת על מחרוזות צריך לה קפיד על ••

•• strcmp(input,strcmp(input,””aa””))

: : ולאולא••

•• strcmp(input,strcmp(input,’’aa’’))

סיכ ום סיכ ום--מחרוזות מחרוזות

::דיברנו עלדיברנו על

..ואיתחולואיתחולהגדרה הגדרה ••

..סימון סוף המחרוזתסימון סוף המחרוזת••

..פלט של מחרוזותפלט של מחרוזות//קלטקלט••

..פעולות על מחרוזותפעולות על מחרוזות••

Page 27: 7 מחרוזות

27

?שאלות נוספות

שיעור שבי עי שיעור שבי עי––מבוא למדעי המחשב מבוא למדעי המחשב