לוגו אתר Fresh          
 
 
  אפשרות תפריט  ראשי         אפשרות תפריט  מבזקים     אפשרות תפריט  צור קשר     חץ שמאלה ‎print ‎"Hello World!"; if‎ ‎not rules.‎know ‎then rules.‎read(); חץ ימינה  

לך אחורה   לובי הפורומים > מחשבים > תכנות ובניית אתרים
שמור לעצמך קישור לדף זה באתרי שמירת קישורים חברתיים
תגובה
 
כלי אשכול חפש באשכול זה



  #3  
ישן 21-12-2015, 12:47
צלמית המשתמש של ai22
  משתמש זכר ai22 ai22 אינו מחובר  
 
חבר מתאריך: 29.09.09
הודעות: 11,192
בתגובה להודעה מספר 1 שנכתבה על ידי maorhag שמתחילה ב "רקורסיה בC"

זאת לא בעיה.
сhar* my_func(int b)
זאת הדרך להחזיר מערך - אלא שלא ניתן להחזיר מערך שהוגדר על הSTACK (כי השטח יוזר מייד כשתצא מהפונקציה)
לכן המערך צריך להיות גלובאלי (אם מקסימום הגודל ידוע מראש), או בהקצאה דינמית אם לא.

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

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

איבר מינימלי הוא האיבר הראשון או האחרון, די קל לספור כמה פעמים הוא מופיע במערך ממויין.
אם מדובר באיבר שאינו ראשון אלא בעל מספר המופעים המינימלי משתמשים במשהו שמזכיר BUCKET SORT - כל פעם שנתקלים באבר חדש מקצים לו תא חדש, וסופרים את מספר האיברים,
בכל זמן נתון שומרים את המספר במינימלי שמצאנו עד עכשיו.
וכשעוברים לספירת המופעים של מספר אחר - משווים את מספר המופעים שמצאת לאותו מספר מינימלי - ואם צריך - מספר המופעים האחרון הופך למינימלי.

נערך לאחרונה ע"י ai22 בתאריך 21-12-2015 בשעה 13:00.
תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
  #15  
ישן 22-12-2015, 12:21
צלמית המשתמש של maorhag
  maorhag maorhag אינו מחובר  
 
חבר מתאריך: 09.01.06
הודעות: 3,964
שלח הודעה דרך MSN אל maorhag
בעיה אחרונה...
בתגובה להודעה מספר 1 שנכתבה על ידי maorhag שמתחילה ב "רקורסיה בC"

כתבתי פונקציה שמוצאת את מספר ההופעות של המספר הכי קטן במערך,לאחר מכן התברר לי שהפונקציה צריכה לקבל רק את המערך והגודל שלו ולא שום פרמטר אחר,הנה הקוד שלי:
קוד PHP:
 int Min(int arr[], int size,int pointer,int count,int min)
{
    if (
size == 0)
        return 
count;
    if (
arr[pointer] == min)
        
count++;
    if (
arr[pointer]<min)
    {
        
min arr[pointer];
        
count=1;
    }    
    
count Min(arrsize 1pointer 1countmin);
    return 
count;


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

תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
  #17  
ישן 22-12-2015, 15:57
צלמית המשתמש של קוביבי
  משתמש זכר קוביבי קוביבי אינו מחובר  
מנהל פורום מערכות הפעלה - הרובע המייקרוסופטי.
 
חבר מתאריך: 07.10.04
הודעות: 13,777
LinkedIn profile
בתגובה להודעה מספר 15 שנכתבה על ידי maorhag שמתחילה ב "בעיה אחרונה..."

בגדול הרעיון הוא להשתמש בפונקציה הזו כבסיס (מציאת מינימום כאשר אתה מקבל רק 2 איברים, המערך והגודל)
קוד:
int findmin(int[] arr, int size) { if (size == 0) return (arr[0]); int tempMinVal = findmin(arr, size - 1); if (tempMinVal < arr[size]) return tempMinVal; return arr[size]; }


ההבדל הוא שאתה רוצה לספור את כמות הפעמים בו האיבר המינימלי חוזר,
דרך אחת כמו שBenjamin Willard אמר - תשתמש במשתנה static (אם אתה מכיר) ואז במקום להחזיר את האיבר המינימלי תחזיר counter+1 אם האיבר המינימלי שווה לאיבר הנוכחי או 1 אם האיבר הנוכחי קטן מהמינימלי.
דרך שנייה היא להחזיר int* שהוא יהיה מצביע למערך הכולל את הערך המינימלי כאיבר הראשון וכמו החזרות כאיבר השני.

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

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

תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
תגובה

כלי אשכול חפש באשכול זה
חפש באשכול זה:

חיפוש מתקדם
מצבי תצוגה דרג אשכול זה
דרג אשכול זה:

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

קוד vB פעיל
קוד [IMG] פעיל
קוד HTML כבוי
מעבר לפורום



כל הזמנים המוצגים בדף זה הם לפי איזור זמן GMT +3. השעה כעת היא 14:22

הדף נוצר ב 0.26 שניות עם 10 שאילתות

הפורום מבוסס על vBulletin, גירסא 3.0.6
כל הזכויות לתוכנת הפורומים שמורות © 2019 - 2000 לחברת Jelsoft Enterprises.
כל הזכויות שמורות ל Fresh.co.il ©

צור קשר | תקנון האתר