
02-05-2007, 09:05
|
|
|
|
חבר מתאריך: 02.05.07
הודעות: 2
|
|
|
צריך עזרה בכמה תרגילים ב-C
אני צריך עזרה בתרגילים הבאים
4. מערך חד מימדי vec באורך 100 המאחסן ספרות ( 0... 9) נקרא מערך מחזורי בעל מחזור per, אם per הוא מערך חד מימדי באורך 5 המאחסן ספרות שונות זו מזו ו- vec מורכב מ- 20 קטעים הזהים ל- per.
דוגמה: המערך הבא:
6
4
1
8
3
הוא המחזור של המערך המחזורי הבא:
...
...
...
6
4
1
8
3
6
4
1
8
3
6
4
1
8
3
6
4
1
8
3
נתונה כותרת הפונקציה הבאה:
int cycle (int vec[], int per[]);
/* טענת כניסה: הפונקציה מקבלת שני מערכים חד מימדיים המאחסנים ספרות: */
/* vec באורך 100 ו- per באורך 5. */
/* טענת יציאה: הפונקציה מחזירה 1 אם vec מחזורי בעל מחזור per , */
/* או 0 אחרת. */
א. השלם את גוף הפונקציה.
ב. כתוב תוכנית הקולטת 5 ספרות שונות זו מזו לתוך מערך חד מימדי per ו- 3000 ספרות כלשהן לתוך 30 מערכים vec ומונה את המערכים vec המחזוריים ובעלי מחזור .per (השתמש בפונקציה שכתבת בא'.) התכנית תפלוט את תוצאת הספירה.
5. נתונה ההצהרה הבאה:
typedef char code_type[20];
ונתונה כותרת הפונקציה הבאה:
int Count (code_type code);
/* טענת כניסה: הפונקציה מקבלת פרמטר code מטיפוס code_type */
/* ובו סדרה של תווים שכל אחד מהם הוא + או - בלבד. */
/* טענת יציאה: הפונקציה מחזירה ערך שלם 1 אם בסדרה מופיעים רק */
/* סימני +, או רק סימני - , או 0 אם בסדרה מופיעים גם סימני + וגם סימני -. */
השלם את הפונקציה על-פי הסעיפים הבאים:
א. בחר משתנים מקומיים מתאימים, הגדר את טיפוסיהם ותאר את תפקידיהם, לצורך ביצוע טענת היציאה.
ב. כתוב את גוף הפונקציה.
8. נתונה כותרת הפונקציה הבאה:
int Digit (int n, int pos);
/* טענת כניסה: הפונקציה מקבלת שני פרמטרים מטיפוס int: */
/* n מספר שלם כלשהו ו- pos ספרה בין 1-9. */
/* טענת יציאה: הפונקציה מחזירה את הספרה במספר n, שמספרה הסידורי pos, */
/* כאשר סדר הספרות מימין לשמאל. אם מספר ספרותיו של n קטן מ- pos, */
/* אז הפונקציה תחזיר 1-. */
/* דוגמה: עבור הקלט n = 17489, pos = 1 , הפונקציה תחזיר 9. */
/* עבור הקלט n = 17489, 4 pos =, הפונקציה תחזיר 7. */
/* עבור הקלט n = 17489, pos = 6, הפונקציה תחזיר 1-. */
השלם את גוף הפונקציה.
9. מעבד תמלילים עורך כל טקסט באופן הבא: בכל משפט, כל שתי מלים עוקבות מופרדות ע"י רווח בודד וכל משפט מסתיים בנקודה.
עקב כניסת וירוס למעבד התמלילים, נגרמה התקלה הבאה: בכל משפט בטקסט, המלה הארוכה ביותר מסתובבת ימינה כלומר, האות הימנית ביותר הופכת להיות השמאלית ביותר ושאר האותיות מוזזות בהתאם (האות הראשונה הופכת להיות שניה, השניה הופכת להיות שלישית וכך הלאה).
פתח אלגוריתם הקולט טקסט המורכב מ- 20 משפטים, מתקן בו את התקלה הנ"ל ולאחר מכן, פולט אותו.
פתור את הבעיה לפי השלבים הבאים:
א. הגדר קבועים וטיפוסי נתונים. בחר משתנים, תאר את טיפוסיהם ואת תפקידיהם.
ב. פרק את הבעיה לתת-משימות, כך שכל תת-משימה תיפתר באמצעות פונקציה. לכל אחת מהפונקציות רשום כותרת, טענת כניסה וטענת יציאה.
ג. יישם בשפת C את הפתרון, תוך שימוש בפונקציות לפי תתי-המשימות שהגדרת בסעיף ב'.
שאלה 6
נתונים שני מערכים: Numbers_One בגודל 6 מטיפוס תווי ו- Numbers_Two בגודל 6 מטיפוס שלם. במערך Numbers_One התערבבו האותיות. במערך Numbers_Two רשומים המקומות הסידוריים הנכונים של האותיות במערך Numbers_One.
כתוב קטע תכנית המדפיס את האיברים של Numbers_One בסדר הנכון תוך שימוש במערך Numbers_Two.
לדוגמא:
מערך Numbers_One.
5
4
3
2
1
0
S
A
M
O
L
H
מערך Numbers_Two
5
4
3
2
1
0
4
3
2
5
1
6
הפלט: SHALOM
שאלה 7
במשחק השלכת כדורי הברזל משתתפים 10 שחקנים. כל שחקן זורק בתורו את כדור הברזל מספר לא ידוע של פעמים. השחקן מפסיק לזרוק כדורים לאחר שהוא זורק למרחק שאורכו קטן מאורך הזריקה האחרונה (עבור אותו שחקן). כתוב תוכנית אשר קולטת עבור כל שחקן את מרחקי הזריקות שלו, התוכנית תדפיס את מספר השחקן, את המרחק המכסימלי שזרק ומספרה הסידורי של הזריקה המכסימלית.
הערה : אין צורך לבדוק את תקינות הקלט.
שאלה 8
לפניך טענת כניסה וטענת יציאה של פונקציה:
טענת כניסה: הפונקציה מקבלת מערך חד ממדי בגודל 30 המכיל מספרים טבעיים (שלמים חיובים).
טענת יציאה: הפונקציה מחזירה אמת אם כל מספר הנמצא במקום אי זוגי במערך קטן מסכום שני המספרים הצמודים שלו משמאל ומימין.
א. כתוב את הפונקציה בסביבת העבודה
כתוב תכנית הקולטת 30 מספרים טבעיים למערך ובודקת בעזרת הפונקציה שכתבת בסעיף א', אם כל מספר הנמצא במקום אי זוגי במערך קטן מסכום שני המספרים הצמודים שלו משמאל ומימין. התכנית תדפיס הודעה מתאימה
שאלה 9
נתון מסמך המכיל 20 שורות . בתחילת כל שורה מופיע מספר, ולאחריו מופיעה מחרוזת המכילה מספר מלים השווה למספר המופיע בתחילת השורה. בין כל מלה ומלה במחרוזת מופיע רווח אחד בדיוק.
א. פתח ויישם אלגוריתם שיקלוט את כל הנתונים המופיעים במסמך הנתון. על האלגוריתם לבנות עבור כל שורה מילה מסכמת, המורכבת מראשי תיבות השורה (האותיות הראשונות של מלות השורה).
האלגוריתם ידפיס טבלה בה מופיע מספר כל שורה והמילה המסכמת עבור אותה
שורה.
דוגמה לאחת השורות במסמך :
6 please and see cat and lamb
המילה המסכמת עבור אותה שורה : pascal
· פרק את הבעיה לתת משימות, כך שכל תת-משימה תיפתר באמצעות תת-תוכנית. הגדר את המטרה של כל תת-משימה (הגדר טענת כניסה וטענת יציאה לכל תת-משימה).
· בחר במשתנים עיקריים, הגדר את טיפוסיהם, ותאר את תפקידיהם.
ב. כתוב תוכנית בשפת מחשב ליישום האלגוריתם שפיתחת בסעיף .
שאלה 10
א. מספר ראשוני הוא מספר המתחלק ב- 1 ובעצמו בלבד.
כתוב פונקציה המקבלת מספר שלם N בין 1 ל- 1000 ומחזירה 'אמת' אם N הוא מספר ראשוני ו'שקר' אחרת.
את הפונקציה יש לכתוב עפ"י שיטת "הכברה של אריסטוטנס" באופן הבא:
1. מלאו מערך ברשימת המספרים השלמים העוקבים מ- 1 עד 1000.
2. סרקו את רשימת המספרים ומחקו את כל הכפולות של 2 הגדולות מ- 2.
3. סרקו את רשימת המספרים ומחקו את כל הכפולות של 3 הגדולות מ- 3.
חזרו על פעולה זו לגבי שאר המספרים
לדוגמא: מערך בגודל 10, שמשמש כ"כברה של אריסטוטנס"
יראה כך לאחר ביצוע סעיף 1: (1 2 3 4 5 6 7 8 9 10)
יראה כך לאחר ביצוע סעיף 2: (1 2 3 0 5 0 7 0 9 0)
המספרים 4,6,8,10 נמחקו כאשר נמחקו כל הכפולות של 2 .
יראה כך לאחר ביצוע סעיף 3: (1 2 3 0 5 0 7 0 0 0)
המספר 9 נמחק כאשר נמחקו כל הכפולות של 3 .
כל המספרים הנותרים הם המספרים הראשוניים בין 1 ל- 10.
ב.כתוב תוכנית הקולטת 100 מספרים טבעיים בין 1 ל-1000 למערך. השתמש בפונקציה של סעיף א', כדי לבדוק האם מספר המספרים הראשוניים הנמצאים במחצית הראשונה של המערך, גדול ממספר המספרים הראשוניים הנמצאים במחצית השניה של המערך.
|