קהילות פורומים, הורדות, יעוץ ותמיכה


אשכולות דומים

  1. [מדריך]מדריך למתחילים בשפת C
    על ידי B1ackSn0w בפורום האקינג ואבטחת מידע
    תגובות: 5
    הודעה אחרונה: 01-08-2008, 14:05
  2. [מדריך] פתיחת דלת האינטרקום בלי מפתח ובלי אף אחד שיפתח !
    על ידי אוריה בפורום ארכיון מדריכים
    תגובות: 36
    הודעה אחרונה: 29-10-2006, 13:39
  3. מדריך לטיל מים
    על ידי אוריה בפורום ארכיון מדריכים
    תגובות: 6
    הודעה אחרונה: 08-10-2006, 23:48
  4. מדריך: קיצור דרך לכבות תמחשב
    על ידי אוריה בפורום ארכיון מדריכים
    תגובות: 3
    הודעה אחרונה: 16-09-2006, 14:33
מציג תוצאות 1 עד 7 מתוך 7

[מדריך][C]הלולאות והשימוש בהן בשפת C

  1. #1

    ברירת מחדל [מדריך][C]הלולאות והשימוש בהן בשפת C

    המדריך נכתב במקור על ידי עצמי, ופורסם לראשונה בפורום מתחרה. כל הזכויות שמורות. אין זכות להעתיק ללא רשות הכותב.
    ---------------------------------------------------------------------------------
    מדריך זה הוא המשך למדריך למתחילים בC שנכתב לפני זמן מה בפורום.
    תוכן העניינים:
    -לולאות - מה ולמה?
    -הלולאה For
    -הלולאה While
    -הלולאה Do While
    -תרגיל סיכום



    לולאות
    לולאות הם אחד מהכלים החשובים והשימושיים ביותר של שפת C ושל התכנות בכלל.
    מטרת הלולאות הם לבצע פעולה מסויימת פעמים רבות. הלולאות מתבצעות מספר מסויים של פעמים, ועושות פעולה מסויימת אותו מספר פעמים.
    למשל אם תרצה להקליד את המספרים מ1 עד 5 לא תכתוב זאת כך:
    קוד:
    printf("1"); ... printf("5");
    במקרה הזה זה אומנם פשוט, לכתוב את אותה הפעולה 5 פעמים. אך מה יקרה שתרצה לכתוב 30, 100, ו-1000 פעולות כאלו?
    זהו בזבוז זמן מוחלט לכתוב זאת ידנית, וכאן בא לידי ביטוי השימוש בלולאות - שמתבצע בכמה שורות בודדות בלבד!
    בשפת C, קיימים 3 סוגי לולאות - ובמדריך זה נכיר את כולם.
    זה עשוי להשמע לא ברור, אך הכל יתבהר כאשר נבנה יחד לולאה פשוטה מכל הסוגים.

    אם הבנת למה פחות-או-יותר משמשות הלולאות - התחל לקרוא, אחרת קרא שנית את הקטע הנ"ל ונסה להבין.



    הלולאה For
    הלולאה for היא הלולאה הנוחה והטובה ביותר לחזרה על פעולה מסויימת.
    להלן מבנה הפקודה for:
    קוד:
    for(אתחול משתנים;תנאי הסיום ללולאה;קידום משתנים)
    {
    הפעולה אותה תרצה לבצע
    }
    בלולאה הזו עליך לעשות 3 פעולות: תחילה עליך לאתחל משתנה, אח"כ עליך יהיה לתת לו תנאי סיום, ולבסוף לקדמו. הכוונה בעצם בפעולה זאת היא לקבוע כמה פעמים הלולאה תתבצע.
    לדוגמא, הלולאה הבאה תתבצע 10 פעמים.
    קוד:
    for(i=1;i<=10;i++)
    // some code
    ננתח את הקוד: תחילה אנו מאתחלים את המשתנה i בערך 1, התנאי שלנו הוא כל עוד i קטן או שווה ל10 בצע את קוד הלולאה, ובכל פעם המשתנה i יגדל באחד (i++).
    לולאה זו תתבצע 10 פעמים. השורות הבאות מתארות את המתרחש בלולאה עד שהיא מסתיימת:
    הלולאה מתבצעת בפעם ה-1, ערכו של i כעת שווה ל1, והתנאי 10=>1 אכן נכון.
    הלולאה מתבצעת בפעם ה-2, ערכו של i כעת שווה ל2, והתנאי 10=>2 אכן נכון.
    ...
    הלולאה מתבצעת בפעם ה-10, ערכו של i כעת שווה ל10, והתנאי 10=>10 אכן נכון.
    הלולאה לא מתבצעת פעם נוספת, מכיוון שכעת ערכו של i שווה ל11 והתנאי (11 קטן או שווה ל10) אינו נכון.

    ראינו, אם כך, שבלולאת ה-for מתבצעות 3 פעולות:
    אתחול המשתנה, בו אנו מקצים למונה שלנו ערך מסויים (כמעט תמיד ערך מספרי)
    התנאי, שנבדק בכל פעם אם הוא מתקיים, ואם הוא לא מתקיים תתבצע יציאה מהלולאה
    הקידום, בו אנו מקדמים את המונה שלנו על מנת שההלולאה תיעצר מתישהו (אם לא נקדם את i ערכו יישאר 1 והתנאי 10=>i יתקיים ולא ייפסק לעולם)


    כעת נציג בעזרת הלולאה for את המילה hello על המסך 5 פעמים:
    קוד:
    for(i=0;i<5;i++)
    printf("hello\n");
    בכל סיבוב של הלולאה גדל ערכו של i. מטרת הלולאה הזאת, כמו שנאמר, היא להקליד את המילה "hello" חמש פעמים. תוכלו להריץ את הקוד ולראות את התוצאה.
    הלולאה הזו תתקיים 5 פעמים מפני שבכל פעם גדל ערכו של i ב-1, ז"א שאם ערכו של i אינו קטן מ-5, תיפסק הלולאה.

    ראינו, אפוא, כי המטרה של הלולאה for היא לעשות פעולה מסויימת כמה פעמים, הדבר קורה ע"י פלט "hello" בכל סיבוב של הלולאה.
    בלולאה for נשתמש כאשר אנו יודעים כמה פעמים הלולאה תפעל מראש.




    הלולאה While
    הלולאה While בדומה ללולאת ה-for, תבצע פעולה מסויימות כמה פעמים, עד שתנאי מסויים מפסיק להתקיים. בניגוד ללולאת ה-for, בלולאה זו בד"כ נשתמש כאשר איננו יודעים כמה פעמים תפעל הלולאה.
    לולאה זו צריכה פרמטר אחד בלבד בשביל לפעול: תנאי הלולאה. במקרה בו צריך לאתחל את מונה הלולאה או לקדם אותו, זה יעשה לפני או בתוך הלולאה.
    להלן מבנה הלולאה של הלולאה While:
    קוד:
    while(תנאי)
    {
    הפעולה אותה תרצה לבצע
    }
    כפי שניתן לראות, במבנה הלולאה, כמו שנאמר, אין קידום או אתחול מונה בניגוד ללולאת for.

    הנה דוגמא ללולאת while פשוטה שתדפיס את המחרוזת "hello" חמש פעמים:
    קוד:
    i=0;
    while(i<5){
    printf("hello");
    i++
    }
    והמשמעות היא: הדפס את המילה hello למשתמש כל עוד מונה הלולאה (i) קטן מ-5. על ערכו של i נכריז לפני פתיחת הלולאה, ונקדמו בגוף הלולאה.


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

    הלולאה Do While
    הלולאה Do While למעשה דומה מאד ללולאה While; השוני היחידי בין השניים, הוא שDo While יתקיים לפחות פעם אחת, אפילו אם התנאי התחילתי שלו לא נכון.
    זה עשוי להשמע קצת מסובך, אך כשנעבור על תוכנית פשוטה הכל יובן.
    להלן מבנה הלולאה של הלולאה Do while:
    קוד:
    do
    {
    הפעולה אותה תרצה לבצע
    }
    while(תנאי)
    למעשה, בלולאה זו, קודם מתבצעות פעולות בלולאה, ורק לאחר מכן נבדק התנאי.
    הלולאה הזאת תפעל פעם אחת בכל מקרה, אפילו אם התנאי שלה לא מתקיים. לאחר ביצוע פעולות הלולאה נבדק התנאי "כל עוד". אם התנאי עדיין תקף הלולאה תרוץ פעם נוספת, אחרת, הלולאה תיעצר והתוכנית תמשיך לרוץ.
    הנה לדוגמא לולאת Do While שמדפיסה את המחרוזת "hello" חמש פעמים:
    קוד:
    i=0;
    do
    {
    printf("hello");
    i++
    }
    while(i<5)
    גם בלולאה הזו, הקידום והאתחול של מונה הלולאה לא מתבצע במבנה הלולאה.

    אז מה בעצם השוני בין הלולאה הזאת ללולאת while? למה קיימים 2 סוגים של לולאות? נסתכל על הדוגמא הבאה:
    קוד:
    i=5;
    do
    {
    printf("hello");
    i--;
    }
    while(i>2)
    התנאי של הלולאה לא מתקיים, אך בכל זאת זה יהיה הפלט של הלולאה:
    hello
    הדבר הזה קורה, מכיוון שבלולאת ה-do while, בניגוד ללולאת ה-while, קודם מתבצעים הפעולות ורק אז מתבצע התנאי.
    ז"א שאפילו אם התנאי התחילתי של הלולאה לא מתקיים, הלולאה תפעל פעם אחת.

    נשאלת השאלה: למה זה טוב? בשביל מה צריך את הלולאה הזאת?
    אם כך, למעשה הלולאה הזאת היא הלולאה הכי פחות שימושית, אבל בכל זאת יש לה שימוש:
    לדוגמא, אם למשל נרצה לקלוט מספר שלם בין 0 ל-100 מהמשתמש, ולשאול אותו להכנסת המספר עד אשר המספר שיוכנס יהיה נכון, במצב הזה לולאת ה-do while היא הלולאה הנכונה לשימוש:
    קוד:
    int number=180;
    do
    {
    printf("Enter a number: ");
    scanf("%d", &number);
    }
    while(number>100 Or number<0)
    והמשמעות היא: קלוט מספר מהמשתמש כל עוד המספר שנקלט גדול מ-100 או קטן מ-0.
    אם היינו משתמשים בלולאה while פה, הערך של Number לא היה מתקיים והלולאה כלל לא הייתה מתחילה לפעול.

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



    תרגיל סיכום
    כדי להיות בטוחים שהבנו את מטרת הלולאות ואת שימושיהן, נכין עתה ביחד תרגיל סיכום.
    בתרגיל זה תחילה נבקש מהמשתמש להקשת מספר שלם בין 1 ל-100, במקרה בו יקיש המשתמש מספר "לא חוקי" הוא יתבקש להכנסת המספר עד אשר יקיש מספר תקין.
    לאחר מכן, יתבצעו 2 לולאות: לולאת for ולולאת while. לולאת ה-for תציג את כל המספרים מ-1 עד למספר שהוכנס, לדוגמא: 1,2,3...50
    ואילו לולאת ה-while תדפיס למשתמש את כל המספרים מהמספר הנקלט עד ל-1, לדוגמא: 50,49,48...1
    קוד:
    #include<stdio.h> //1
    #include<conio.h> //2
    
    int main(){ //3
    int i; //4
    int number; //5
    
    do //6
    { //7
    printf("Enter a number(1-100): "); //8
    scanf("%d", &number); //9
    } //10
    while(number<0 Or number>100) //11
    
    for(i=1;i<=number;i++) //12
    { //13
    printf("%d, " i); //14
    } //15
    
    printf("\n\n\n\n\n\n"); //16
    
    i=number; //17
    while(i>1) //18
    { //19
    printf("%d, ", i); //20
    i--; //21
    } //22 
    
    getch() //23
    }  //24
    מסובך? הכל יובהר בהסבר התוכנית.

    הסבר התוכנית:
    בשורות 1-2 אנו מייבאים 2 סיפריות ע"מ שהתוכנית יפעל: stdio - פלט וקלט סטנדטי של כל תוכנית, ו-conio - לטיפול בפעולות מסך.

    בשורה 3 אנו בעצם פותחים את ה-main בו תיכתב פרוצדורת התוכנית.
    בשורות 4-5 אנו מכריזים על 2 משתנים: מונה הלולאה - i, והמספר שנקלוט מהמשתמש - number.

    בשורות 6-7 אנו פותחים לולאת do while חדשה שמטרתה לקלוט מספר בין 1 ל-100.
    בשורה 8 אנו מבקשים מהמשתמש להקליד מספר בין 1 ל-100, ובשורה 9 אנו קולטים מספר זה.
    בשורות 10-11 אנו סוגרים את לולאת ה-do while ומגדירים ללולאה זו תנאי: בצע לולאה זו כל עוד המספר שנקלט יוצא מהתחום הרצוי.

    בשורות 11-12 אנו פותחים לולאת for חדשה, מטרת הלולאה הזאת היא להציג את כל המספרים מ-1 עד למספר שנקלט. הלולאה הזאת תתבצע עד ש-i שווה למספר שנקלט, ובכל סיבוב של הלולאה ערכו של i יגדל ב-1.
    בשורה 14 אנו מציגים את ערכו של מונה הלולאה (i) למשתמש.
    בשורה 15 אנו מסיימים את לולאת ה-for.
    למעשה לאחר סיום פעולות הלולאה הפלט יהיה בערך כזה: (המספר שנקלט בדוגמא זו - 5) 1, 2, 3, 4, 5

    בשורה 16 אנו יורדים מספר שורות כדי לעשות הפרדה בין 2 הלולאות.

    בשורה 17 אנו מציבים למונה הלולאה (i) את הערך של המספר שנקלט.
    בשורה 18-19 אנו מתחילים לולאת while וקובעים לה את התנאי: בצע את הלולאה כל עוד ערכו של מונה הלולאה (i) גדול מ-1.
    בשורה 20 אנו מציגים את ערכו של i למשתמש.
    בשורה 21 אנו מחסרים את ערכו של i ב-1.
    בשורה 22 אנו סוגרים את לולאת ה-while.
    למעשה לאחר סיום פעולות הלולאה הפלט יהיה בערך כזה: (המספר שנקלט בדוגמא זו - 5) 5, 4 3, 2, 1

    בשורה מס' 23 אנו "קולטים תו" ובכך מונעים מהתוכנית מלצאת אוטומטית לאחר ביצוע הפעולות.
    בשורה מס' 24 אנו מסיימים את התוכנית.





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

  2. קישורים ממומנים

  3. #2
    משתמש מתחיל
    שם פרטי
    מאור
    תאריך הצטרפות
    11/2005
    הודעות
    55
    לייקים
    0
    נקודות
    0
    משפט מחץ
    מה שלא הורג אותך מחשל אותך
    מין: זכר

    ברירת מחדל

    תודה

  4. #3
    בעלים
    תאריך הצטרפות
    08/2004
    גיל
    36
    הודעות
    14,445
    לייקים
    233
    נקודות
    1,090
    משפט מחץ
    אם אין אני לי, מי לי.
    מין: זכר

    ברירת מחדל

    מדריך מעולה, יש לך אולי מדריך ליותר מתחילים ב C?

  5. #4
    משתמש כבוד האוואטר של Nethaniel
    תאריך הצטרפות
    04/2007
    הודעות
    3,986
    לייקים
    0
    נקודות
    1,088
    משפט מחץ
    I Was Born Ready, Mother Fucker
    מין: זכר

    ברירת מחדל

    מדריך ברמה מאוד גבוהה!
    כל הכבוד!


  6. #5

    ברירת מחדל

    זה דיי בסיסי אבל תודה על ההשקעה
    slickskter@gmail.com





  7. #6

    ברירת מחדל

    איך אני משתמש איפה אני כותב את זה אפשר הסברים ?

  8. #7

    ברירת מחדל

    כן. יש מדריך בסיסי יותר, שמלמד ממש מההתחלה, פשוט אף אחד לא טרח להגיב בו ^^
    הנה הקישור: http://www.atraf-f.net/showthread.php?t=236515
    כדי להריץ את שפת C אתם זקוקים למהדר (או compiler [קומפיילר] בלועזית). במהדר תכתבו ותריצו את התוכניות שלכם. מהדר טוב הוא ++DIV C ו-BORLAND C (אין צורך בשני המהדרים, אחד יספיק!). אם תרצו להריץ ולבחון תוצאות, הורידו אחד מהמהדרים האלו.
    נערך לאחרונה על ידי talikag; 03-08-2007 בשעה 21:30.



הרשאות פרסום

  • אין באפשרותך לפרסם נושאים חדשים
  • אין באפשרותך לפרסם תגובות
  • אין באפשרותך לצרף קבצים
  • אין באפשרותך לערוך את הודעותיך


כל הזמנים הם לפי GMT +3. השעה כרגע היא 20:26.
מופעל על ידי vBulletin™ © גרסה 4.1, 2011 vBulletin Solutions, Inc. כל הזכויות שמורות.
פעילות הגולשים
אומנות וגרפיקה
מוזיקה
ספורט
סדרות טלוויזיה
סרטים וקולנוע
קנייה ומכירה
רשתות חברתיות
הבורר 3
פורומי פנאי ובידור
סרטים
סדרות
משחקים
דיבורים
אקטואליה
בעלי חיים
בדיחות והומור
משחקי ספורט
הבורר
מחשבים וטכנולוגיה
תמיכה טכנית
חומרה ומודינג
תוכנות להורדה
סלולארי וגאדג'טים
רקעים למחשב
ציוד הקפי למחשב
אבטחת מידע
תכנות ובניית אתרים
כסף ברשת
אייפון
בריאות ואורח חיים
כושר ופיתוח גוף
דיאטה
צבא וגיוס
יעוץ מיני
מה שבלב
אומנות הפיתוי
יהדות
מיסטיקה ורוחניות
אתאיזם ודתות

נושאים: 2,473,167 | הודעות: 8,173,754 | משתמשים: 315,603 | המשתמש החדש ביותר: upizijoj | עיצוב גרפי: סטודיו עודד בביוף | קידוד: rellect