כותב |
|
נועה אורח
הצטרף / הצטרפה: 01 October 2003
משתמש: אונליין הודעות: 12647
|
נשלח בתאריך: 15 December 2008 בשעה 16:05 | | IP רשוּם
|
|
|
|
שלום
אני מבקשת עזרה בשאלה הזאת...
א. כתבו פונקציה בעלת המפרט ) prototype ( הבא:
void fix34(int array[], int size);
הפונקציה מקבלת מערך של מספרים שלמים ואת גודל המערך . הפונקציה משנה את סדר
האברים במערך כך שלאחר כל מופע של המספר 3 יופיע המספר 4. מותר להזיז אברים במערך
ככל שתדרשו למעט האברים שערכם 3 .
הנחות:
- מספר המופעים של המספרים 3 ו- 4 שווה.
- המספר 3 אינו מופיע במקום האחרון במערך.
- אם המספר 3 מופיע במקום ה i במערך במקום ה i + 1 לא מופיע 3 .
דוגמאות:
fix34([3,1,2,4], 4) ⇒ [3,4,2,1]
fix34([3,4,5,3,2,4], 6) ⇒ [3,4,5,3,4,2]
fix34([4,3,1,3,5,4,1], 7) ⇒ [1,3,4,3,4,5,1]
ב. נרצה לכתוב תכנית הקוראת עשרה מספרים מהמשתמש לתוך מערך ומסדרת אותם מחדש
בעזרת הפונקציה fix34 . איננו יכולים להניח את נכונות הקלט, לפיכך ממשו את הפונקציה:
int is_valid_input(int arr[], int size);
הפונקציה מוודאת את נכונות הקלט , כלומר, שמספר המופעים של המספרים 3 ו- 4 שווה, ששני
מופעים של המספר 3 אינם מופיעים ברצף ושהמספר 3 אינו מופיע במקום האחרון במערך .
הפונקציה תחזיר true אם הקלט תקין אחרת תחזיר false .
ג. כעת נ וכל לגשת למימוש התכנית . על התכנית לקלוט עשרה מספרים שלמים מהמשתמש . אם
הקלט תקין יש לסדר את המספרים מחדש בעזרת הפונקציה מסעיף א ', אחרת יש להדפיס הודעת
שגיאה ולסיים את התכנית.
כתבו את התוכנית כך שאם נרצה לשנות את מספר הקלטים נדרש לבצע שינוי יחיד בקוד.
יש לצר ף דוגמאות הרצה שידגימו את פעולת התכנית עבור כמה קלטים תקינים ועבור כל
אחד מהמקרים בהם הקלט אינו תקין.
דוגמאות:
1 2 3 4 5 6 7 8 9 10
Before permutation: [1,2,3,4,5,6,7,8,9,10]
After permutation: [1,2,3,4,5,6,7,8,9,10]
10 9 8 7 6 5 4 3 2 1
Before permutation: [10,9,8,7,6,5,4,3,2,1]
After permutation: [10,9,8,7,6,5,2,3,4,1]
1 2 3 3 1 2 3 4 1 4
Before permutation: [1,2,3,3,1,2,3,4,1,4]
Illegal input!
|
חזרה לתחילת העמוד |
|
|
כפיר אורח
הצטרף / הצטרפה: 01 October 2003
משתמש: אונליין הודעות: 12647
|
נשלח בתאריך: 15 December 2008 בשעה 19:11 | | IP רשוּם
|
|
|
|
#include <stdio.h>
#define ARR_SIZE 10
#define TRUE 1 #define FALSE 0
/* checking if the input is valid */ int is_valid_input(int arr[], int size) { int i, counter = 0; /* checking if size is valid or if the last element is not 3 */ if(size < 2 || arr[size - 1] == 3) return FALSE; /* cheking the ratio of 3 and 4 */ if(arr[size - 1] == 4) counter--; for(i = 0; i < size - 1; i++) { if(arr[i] == 3) { if(arr[i + 1] == 3) // consecutive 3 return FALSE; counter++; } if(arr[i] == 4) counter--; } return(counter == 0); // return TRUE; }
/* fixing the array's order */ void fix34(int arr[], int size) { int i, j, tmp;
for(i = 0; i < size - 1; i++) { if(arr[i] == 3 && arr[i + 1] != 4) { for(j = 0; j < size - 1; j++) { if(arr[j] == 4 && (j == 0 || arr[j - 1] != 3)) break; } tmp = arr[i + 1]; arr[i + 1] = arr[j]; arr[j] = tmp; } } return; }
/* printing the new array */ void printf_array(int arr[], int size) { int i;
putchar('['); for(i = 0; i < size - 1; i++) printf("%d,", arr[i]); printf("%d]\n", arr[i]); return; }
/* main function */ int main() { int i, arr[ARR_SIZE]; for(i = 0; i < ARR_SIZE; i++) scanf(" %d", &arr[i]); if( !is_valid_input(arr, ARR_SIZE) ) { printf("Error input!\n"); return(1); } printf("Before permutation: "); printf_array(arr, ARR_SIZE); fix34(arr, ARR_SIZE); printf("After permutation: "); printf_array(arr, ARR_SIZE); return(0); }
// End Of File
|
חזרה לתחילת העמוד |
|
|
כפיר אורח
הצטרף / הצטרפה: 01 October 2003
משתמש: אונליין הודעות: 12647
|
נשלח בתאריך: 15 December 2008 בשעה 19:23 | | IP רשוּם
|
|
|
|
תמונה של קוד המקור (לקריאה נוחה יותר):
קישור להורדת ארכיון זיפ, הכולל בתוכו את קוד המקור ואת התכנית המהודרת: http://rapidshare.com/files/173621729/permutation.zip.html
|
חזרה לתחילת העמוד |
|
|
נועה אורח
הצטרף / הצטרפה: 01 October 2003
משתמש: אונליין הודעות: 12647
|
נשלח בתאריך: 15 December 2008 בשעה 22:29 | | IP רשוּם
|
|
|
|
תודה רבה לך
|
חזרה לתחילת העמוד |
|
|
|
|