חזרה – מחרוזות Strings

מסמכים קשורים
פתרון מוצע לבחינת מה"ט ב_שפת c מועד ב אביב תשע"ט, אפריל 2019 מחברת: גב' זהבה לביא, מכללת אורט רחובות שאלה מספר 1 מוגדרת מחרוזת המורכבת מהספרות 0 עד 9.

מבוא למדעי המחשב - חובלים

הגשה תוך שבוע בשעת התרגול

Microsoft Word B

אוניברסיטת חיפה החוג למדעי המחשב.5.6 מבוא למדעי המחשב סמסטר א' תשע"ז בחינה סופית מועד א', מרצה: שולי וינטנר מתרגלים: סמאח אידריס, ראמי עילבו

PowerPoint Presentation

Microsoft Word - c_SimA_MoedB2005.doc

מבוא למדעי המחשב - חובלים

שאלהIgal : מערכים דו מימדיים רקורסיה:

סדנת תכנות ב C/C++

אוניברסיטת חיפה החוג למדעי המחשב מרצה: שולי וינטנר מתרגלים: נעמה טוויטו, מחמוד שריף מבוא למדעי המחשב סמסטר א' תשע"ב בחינת סיום, מועד א', הנחי

שאלהIgal : מערכים דו מימדיים רקורסיה:

PRESENTATION NAME

אוניברסיטת חיפה החוג למדעי המחשב מרצה: שולי וינטנר מתרגלים: נעמה טוויטו, מחמוד שריף מבוא למדעי המחשב סמסטר א' תשע"ב בחינת סיום, מועד א', הנחי

PowerPoint Presentation

Slide 1

מבוא לתכנות ב- JAVA תרגול 11

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

מספר מחברת: עמוד 1 מתוך 11 ת"ז: תשע"א מועד ב סמסטר א' תאריך: 00:11 שעה: 0 שעות הבחינה: משך כל חומר עזר אסור בשימוש בחינה בקורס: מבוא למדעי ה

שאלהIgal : מערכים דו מימדיים רקורסיה:

Slide 1

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

הגשה תוך שבוע בשעת התרגול

תרגול 1

מספר זהות: סמסטר ב' מועד א' תאריך: 11102/4// שעה: 9:22 משך הבחינה: 3 שעות חומר עזר: אין מותר השימוש במחשבון פשוט בחינה בקורס: מבני נתונים מרצה: הדר בי

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

Microsoft PowerPoint - rec1.ppt

Slide 1

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

מבוא לתכנות ב- JAVA תרגול 7

Tutorial 11

Slide 1

Slide 1

Slide 1

Slide 1

Programming

Microsoft Word - c_SimA_MoedA2006.doc

Slide 1

תכנות מונחה עצמים א' – תש"ע

PowerPoint Presentation

מבחן סוף סמסטר מועד ב 28/10/08 מרצה אחראית: דר שירלי הלוי גינסברג מתרגלים: גלעד קותיאל, גדי אלכסנדרוביץ הוראות: א. בטופס המבחן 6 עמודים (כולל דף זה) ו

שעור 6

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

úåëðä 1 - çæøä

תורת החישוביות תרגול הכנה לוגיקה ותורת הקבוצות מה יש כאן? בקורס תורת החישוביות נניח ידע בסיסי בתורת הקבוצות ובלוגיקה, והכרות עם מושגים בסיסיים כמו א"ב

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

Slide 1

PowerPoint Presentation

Slide 1

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

Slide 1

PowerPoint Presentation

פייתון

Microsoft PowerPoint - T-10.ppt [Compatibility Mode]

Homework Dry 3

מבחן 7002 פרטים כלליים מועד הבחינה: בכל זמן מספר השאלון: 1 משך הבחינה: 3 שעות חומר עזר בשימוש: הכל )ספרים ומחברות( המלצות: קרא המלצות לפני הבחינה ובדי

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

מערכות הפעלה

Microsoft PowerPoint - rec3.ppt

PowerPoint Presentation

Microsoft Word - דוגמאות ב

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

מהוא לתכנות ב- JAVA מעבדה 3

שקופית 1

Microsoft Word - Ass1Bgu2019b_java docx

Slide 1

ex1-bash

שבוע 4 סינטקס של HACK ASSEMBLY ניתן להשתמש בשלושה אוגרים בלבד:,A,D,M כולם בעלי 16 ביטים. M אינו אוגר ישיר- הוא מסמן את האוגר של ה RAM שאנחנו מצביעים ע

234114

פתרון 2000 א. טבלת מעקב אחר ביצוע האלגוריתם הנתון עבור הערכים : פלט num = 37, sif = 7 r האם ספרת האחדות של sif שווה ל- num num 37 sif 7 שורה (1)-(2) (

PowerPoint Presentation

תרגול מס' 1

מבוא למדעי המחשב, סמסטר א', תשס"ח תרגול מס' 2

Microsoft PowerPoint - lec10.ppt

תרגיל בית מספר 1#

PowerPoint Presentation

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

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

<4D F736F F D20F4FAF8E5EF20EEE5F2E320E020F1EEF1E8F820E120FAF9F2E3>

Microsoft Word - review-sol-Prog123.doc

מתכונת עיצוב 3013

תרגול 3 - מערכים

מבוא לאסמבלי

דף נגזרות ואינטגרלים לשאלון 608 כללים למציאת נגזרת של פונקציה: n 1. y' n x n, y הנגזרת x.1 נכפול בחזקה )נרשום אותה משמאל ל- (. x א. נחסר אחד מהחזקה. ב

Slide 1

שיעור 1

תכנות דינמי פרק 6, סעיפים 1-6, ב- Kleinberg/Tardos סכום חלקי מרחק עריכה הרעיון: במקום להרחיב פתרון חלקי יחיד בכל צעד, נרחיב כמה פתרונות אפשריים וניקח

תוכן העניינים: פרק צמצומים ומימושים של פונקציות בוליאניות... 2 צמצומים של פונקציות באמצעות מפת קרנו:...2 שאלות:... 2 תשובות סופיות:... 4 צמצום

Microsoft PowerPoint - YL-05.ppt

מבחן סוף סמסטר מועד א 15/02/08 מרצה אחראית: דר שירלי הלוי גינסברג מתרגלים: גלעד קותיאל, דניאל גנקין הוראות: א. בטופס המבחן 7 עמודים ו 4 דפי נוסחאות. ב

Slide 1

תורת הקומפילציה

דוגמאות שהוצגו בהרצאה 10 בקורס יסודות מערכות פתוחות דוגמה 1 דוגמאות של פונקציות ב- awk שמראות שהעברת פרמטרים של משתנים פשוטים היא by value והעברת פרמט

Microsoft PowerPoint - lec2.ppt

תשע"דד אביב תוכנה 1 תרגיל מספר 4 עיבוד מחרוזות וקריאה מקבצים הנחיות כלליות: קראו בעיון את קובץ נהלי הגשת התרגילים אשר נמצא באתר הקורס..(

תמליל:

מבוא למדעי המחשב רשימות תרגול 12: ורשומות מקושרות

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

תרגיל 1 כתוב תכנית הקולטת שני מספרים מרוכבים מהמשתמש, מדפיסה אותם ולאחר מכן מדפיסה את הסכום והמכפלה שלהם. בתרגיל ניצור באמצעות רשומות טיפוס חדש הטיפוס החדש הוא מספר מורכב. נגדיר פעולות על הטיפוס הזה כמו : חיבור, חיסור, ומכפלה. נזכיר כי מספר מורכב C הוא זוג של מספרים (a,b) ממשיים כך ש:. c = a + bi חיבור: (a + bi) + (c +di) = (a+c)+ (b+d)i חיסור: (a + bi) - (c +di) = (a-c)+ (b-d)i כפל: (a+bi)*(c+di) = (ac-bd)+ (bc+ad)i

פתרון תרגיל 1 #define PLUS 1 #define SUB -1 typedef struct { double real; double image; Complex ; /* Add or Subtract two complex numbers */ Complex CompOp(Complex,Complex,int optype); /* Multiply two complex numbers */ Complex CompMult(Complex,Complex); /* Read a complex number from the user */ Complex ReadComp(); /* Print a complex number on the screen */ void PrintComp(Complex c);

פתרון תרגיל 1 int main( ) { Complex c1,c2,c3 ; /* declare on 3 complex numbers */ c1 = ReadComp(); /* read c1 from the user */ c2 = ReadComp(); /* read c2 from the user */ PrintComp(c1); /* print c1 on the screen */ PrintComp(c2); /* print c2 on the screen */ c3 = CompOp(c1,c2,PLUS); /* c3 = c1 + c2 */ PrintComp(c3);/* print c3 on the screen */ c3 = CompMult(c3,c2); /* c3 = c3*c2 */ PrintComp(c3); /* print c3 on the screen */ return 0;

פתרון תרגיל 1 Complex CompOp(Complex c1,complex c2,int optype){ Complex cres ; cres.real = c1.real + optype*c2.real ; cres.image = c1.image + optype*c2.image ; return cres ; Complex CompMult(Complex c1,complex c2){ Complex cres ; cres.real = c1.real*c2.real-c1.image*c2.image ; cres.image = c1.image*c2.real + c1.real*c2.image ; return cres ;

Complex ReadComp(){ Complex c ; printf("please enter the real part:"); scanf("%lf",&c.real); printf("please enter the imaginary part:"); scanf("%lf",&c.image); return c ; void PrintComp(Complex c){ printf("%f+%fi\n",c.real,c.image); return ; פתרון תרגיל 1

מצביעים לרשומות כפי שהגדרנו מצביעים לטיפוסים שהכרנו עד כה מצביעים לרשומות. העברה לפונקציה: ניתן להגדיר גם כמו העברה של כל טיפוס אחר: מעבירים את כתובת הרשומה לפרמטר של הפונקציה, שיוגדר לצורך כך כמצביע לרשומה מאותו טיפוס. שימוש: כאשר נרצה לפנות לרשומה המוצבעת - מוסיפים * לפני שם המצביע. לדוגמא על מנת לפנות לשדה real המוצבע ע"י c. נכתוב: (*c).real דרך נוספת: שימוש באופרטור < - לדוגמא c->real

פתרון תרגיל 1 -באמצעות מצביעים דרך נוספת לממש את הפונקציה CompMult בעזרת מצביעים: Complex* CompMult(Complex *c1,complex *c2){ Complex *c3 ; if(!(c3 = (Complex*)malloc(sizeof(Complex))) ){ printf( Out of Memory\n ); exit(1); c3->real = c1->real*c2->real c1->image*c2->image ; c3->image = c1->real*c2->image + c1->image*c2->real; return c3 ; Complex c1,c2,*c3 ; c3 =CompMult(&c1,&c2); הקריאה לפונקציה :

דוגמא מאגר שמות נממש מאגר שמות שיחזיק את שמותיהם של אנשים, ואת כמות השמות ע"י שימוש במבנה הבא: #define MAX_SIZE 15 typedef struct{ char fname[max_size]; /* first name */ char lname[max_size]; /* last name */ Name; typedef struct{ Name* names; int count; NamesDB; /* Names Data Base */ כשלמשתמש ניתנת האפשרות לבחור את גודל המאגר.

int main(){ NamesDB db; int i; printf( Please enter the DB size: ); scanf( %d\n, &db.count); דוגמא מאגר שמות db.names = (Name*) malloc(db.count*sizeof(name)); for(i=0; i<db.count; i++) scanf( %s %s,db.names[i].fname, db.names[i].lname); for(i=0; i<db.count; i++) printf( %d. %s %s\n, i+1, db.names[i].fname, db.names[i].lname); free( db.names ); return 0; הקצאת מערך השמות וקליטת השמות לתוכו מעבר על מערך השמות והדפסת השמות שחרור מערך השמות

דוגמא חיפוש לפי שם משפחה פונקציה שמקבלת מצביע למאר שמות ושם משפחה, ומחזירה את האינדקס של השם האדם הראשון במאגר שיש לו את שם המשפחה (אם לא קיים, יוחזר 1-): int search_lname(namesdb* db, char* lname) { int i; for(i=0; i<db->count; i++) if(!strcmp(db->names[i].lname, lname) ) return i; return -1;

רשימות מקושרות

רשימות מקושרות רשימה מקושרת מורכבת מרשומות הכוללות שדות מידע ושדה שהוא מצביע לרשומה מאותו סוג [נשים לב שהמצביע הוא מצביע לאותו טיפוס מבנה בו הוא מוגדר] שרשרת הרשומות משמשת כמו מערך של רשומות אבל: אין חובה להגדירם ברצף בזיכרון אין חובה לציין את מספרם מראש כך נקבל מבנה נתונים דינאמי בו נוכל להכניס ולהוציא אברים בקלות מימוש: נחזיק מצביע לראש הרשימה head רשומה האחרונה ברשימה תצביע ל NULL

תרגיל 2 כתבו פונקציה המקבלת רשימה מקושרת, בה לפחות איבר אחד וידוע כי האיבר האחרון בה מצביע לNULL נתונות ההגדרות הבאות למבנה הצומת ברשימה המקושרת: typedef struct cell *CellPtr; typedef struct cell { int contents; CellPtr next; Cell; על הפונקציה להדפיס את איברי הרשימה בסדר הפוך.

פתרון תרגיל 2 void rev_prt (CellPtr head){ /* stop condition */ if(head == NULL){ return; rev_prt(head->next); printf("%d ", head->contents); return;

תרגיל 3 הגדירו פונקציה רקורסיבית בשם equal המקבלת שני מצביעים לשתי רשימות מקושרות ומחזירה 1 אם תוכנן של שתי הרשימות זהה ו 0 אחרת. נתונות ההגדרות הבאות למבנה הצומת ברשימה המקושרת: typedef struct node { int data; struct node * next; Node; int equal(node * list1, Node * list2); חתימת הפונקציה:

פתרון תרגיל 3 int equal(node * list1, Node * list2){ if(list1==null && list2==null){ return 1; if(list1==null list2==null){ return 0; return (list1->data==list2->data)&&equal(list1->next,list2->next);

תרגיל 4 כתבו פונקציה בשם printmid המקבלת רשימה מקושרת, בה לפחות איבר אחד וידוע כי האיבר האחרון בה מצביע ל.NULL על הפונקציה להדפיס את ערכו של האיבר האמצעי ברשימה. יש לעבור על הרשימה פעם אחת בלבד!!! נתונות ההגדרות הבאות למבנה הצומת ברשימה המקושרת: typedef struct node { int data; struct node * next; Node;

- הרעיון תרגיל 4 נתקדם ברשימה המקושרת עם שני מצביעים בו- זמנית. מצביע אחד, p1, יקודם כל פעם לצומת הבא ברשימה המקושרת ומצביע שני, המקושרת.,p2 יקודם כל פעם שני צמתים ברשימה כך שבסיום המעבר על הרשימה ע"י המצביע p2 המצביע p1 יצביע על האיבר האמצעי ברשימה.

void printmid(node * head){ Node *p1, *p2; p2 = p1 = head; while(p2 && p2->next){ p1=p1->next; p2=p2->next->next; printf("the mid is %d\n", p1->data); return; פתרון תרגיל 4

תרגיל 5 נתונה הרשומה הבאה המתארת איבר ברשימה דו כיוונית: typedef struct node{ int num; struct node *next; struct node *prev; Node; כתבו פונקציה המקבלת שני מצביעים לתחילת שתי רשימות מקושרות באותו אורך מן הסוג הנ"ל. ומשלבת את אברי הרשימה השנייה בראשונה בסדר הפוך כאשר האיבר הראשון ברשימה החדשה יהיה האיבר הראשון ברשימה הראשונה, האיבר השני יהיה האיבר האחרון מהרשימה השנייה וכך הלאה. אפשר לשנות את הקלט.

תרגיל 5 עבור: למשל, הפונקציה תיצור את הרשימה הבאה:

פתרון תרגיל 5 void merge(node* list1, Node* list2){ Node *p, *q, *r, *s; p = list1; q = list2; while(q->next!= NULL) /* q will point to the end of list2 */ q = q->next; while(p->next!= NULL) /* insert the node from list2 to list1*/{ r = p->next; s = q->prev; q->next = p->next; q->next->prev = q; p->next = q; q->prev = p; p = r; q = s; q->next = NULL; /* dealing with lists of size one */ p->next = q; q->prev = p; return;

תרגיל 6 כתבו פונקציה בשם split המקבלת רשימה מקושרת, בה לפחות איבר אחד וידוע כי האיבר האחרון בה מצביע ל NULL על הפונקציה להחזיר (דרך רשימת הארגומנטים שלה) שתי רשימות: 1. רשימת האברים בקלט ששדה info שלהם זוגי 2. רשימת האברים בקלט ששדה info שלהם אי זוגי אין לפגוע בקלט. בשאלה זו ניתן לממש ולהשתמש בפונקציות עזר. נתונות ההגדרות הבאות למבנה הצומת ברשימה המקושרת: typedef struct node { int info; struct node *next; Node;

פתרון תרגיל 6 מכיוון שאין לפגוע בקלט, עלינו ליצור 2 רשימות חדשות. על מנת להקצות זיכרון לאיבר ברשימה חדשה, נגדיר פונקצית עזר.new_node Node* new_node(int info){ Node* node; if (NULL==(node=(Node*)malloc(sizeof(Node)))) { printf("memory allocation error\n"); exit(1); node->info=info; node->next=null; return node;

void split_lists(node* list, Node** list_odd, Node** list_even){ Node *p_odd, *p_even, *p = list; *list_even=null;*list_odd=null; while(null!=p) { if ((p->info)%2) { p_odd=*list_odd; *list_odd=new_node(p->info); (*list_odd)->next=p_odd; else { p_even=*list_even; *list_even=new_node(p->info); (*list_even)->next=p_even; p=p->next; פתרון תרגיל 6