Keyboard shortcuts

Press ← or → to navigate between chapters

Press ? to show this help

Press Esc to hide this help

Studies

דוגמאות

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

דוגמא 1

נניח שאנחנו רוצים להדפיס את כל המספרים בין 0 ל-100 חוץ ממה שמתחלק ב-3:

#define N 100
int main() {
    for(int i = 0; i < N; i++) {
        if(i % 3 == 0) {
            continue;
        }
        printf("%d\n", i);
    }
}

דוגמא 2

נמצא את המספר החיובי הראשון שקטן ממיליון וסכום ספרותיו הוא 34:

#include <stdio.h>
#define UPPER_BOUND 1000 * 1000
#define WANTED_SUM 34
#define NOT_FOUND -1

int main() {
    int wanted_num = NOT_FOUND;
    for (int i = 0; i < UPPER_BOUND; i++) {
        int sum = 0;
        int n = i;
        while (n > 0) {
            sum += n % 10;
            if (sum > WANTED_SUM) {
                break;
            }
            n /= 10;
        }
        if (sum == WANTED_SUM) {
            wanted_num = i;
            break;
        }
    }
    if (wanted_num != NOT_FOUND) {
        printf("wanted number = %d\n", wanted_num);
    } else {
        printf("No such number exists\n");
    }
}

לאחר מציאת מספר המקיים את התנאי אין צורך להמשיך לחשב ולכן נבצע break.

דוגמא 3

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

#define SUM_LIMIT 500
#include <stdbool.h>
#include <stdio.h>

#define PRODUCT_LIMIT 1000 * 1000
#define NOT_FOUND -1
int main() {
    int lower_limit, upper_limit;
    do {
        scanf("%d %d", &lower_limit, &upper_limit);
    } while (lower_limit < 0 || upper_limit < 0 || lower_limit >= upper_limit);

    int result = NOT_FOUND;
    for (int i = lower_limit; i < upper_limit; i++) {
        int product = 1;
        bool found = true;
        for (int n = i; n > 0; n /= 10) {
            int digit = n % 10;
            if (digit % 2 == 0) {
                found = false;
                break;
            }
            product *= digit;
        }
        if (found && product > PRODUCT_LIMIT) {
            result = product;
            break;
        }
    }
    if (result != NOT_FOUND) {
        printf("Result = %d\n", result);
    } else {
        printf("No result between %d and %d\n", lower_limit, upper_limit);
    }
}

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

דרך נפוצה להשתמש ב-break היא ביציאה מלולאות אינסופיות:

#include <stdio.h>
int main() {
    int input;
    while(1) {
        printf("Enter a positive number\n");
        scanf("%d", &number);
        if(number <= 0) {
            printf("%d is not positive\n", number);
        } else {
            break;
        }
        // Do stuff with positive number
    }
}

דוגמאות

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

  1. כתבו תוכנית המקבלת מהמשתמש רצף של תווי ASCII וסוכמת את כל המספרים מתוכם. אם התו הוא מספר בין 0-9, התוכנית מוסיפה אותו לסכום - אם הוא אינו מספר, התוכנית מסיימת ומדפיסה את התוצאה. אם המשתמש לא הכניס אף מספר נגדיר את הסכום להיות 0.
  2. כתבו תוכנית שמקבלת מספר שלם מהמשתמש ומדפיסה כמה ספרות יש בו.
  3. כתבו תוכנית שמקבלת מספר שלם מהמשתמש ומדפיסה את הספרה הכי גדולה בו.
  4. כתבו תוכנית המדפיסה את לוח הכפל מ-1 ועד 9.
#include <stdio.h>
int main() {
    int sum = 0;
    char input;
    while(1) {
        scanf("%d", &input);
        if(input >= '0' && input <= '9') {
            sum += input - '0';
        } else {
            break;
        }
    }
    printf("sum = %d\n", sum);
}
#include <stdio.h>
int main() {
    int num = -1;
    scanf("%d", &num);
    int digits = 1;
    while(num > 0) {
        num /= 10;
    }
    printf("%d digits\n", digits);
}
#include <stdio.h>
int main() {
    for (int i = 1; i < 10; i++) {
        for (int j = 1; j < 10; j++) {
            printf("%d ", i * j);
        }
        printf("\n");
    }
}

שאלות נוספות

  1. מספר פלינדרום הוא מספר שנקרא אותו דבר כאשר הופכים אותו. למשל, המספר 12321 הוא פלינדרום בעוד ש-12345 אינו פלינדרום. כתבו תוכנית שמקבלת מספר מהמשתמש ומדפיסה האם הוא פלינדרום או לא.

  2. כתבו תוכנית שמקבלת מספר מהמשתמש ומדפיסה באופן סדרתי את סכום ספרותיו עד שנשארת רק ספרה אחת. לדוגמא, עבור המספר 923 יודפס: 923, 14, 5.

  3. כתבו תוכנית שמקבלת מספר מהמשתמש ומדפיסה את הפירוק שלו לגורמים ראשוניים. למשל, עבור המספר 360 יודפס 2 2 2 3 5, מכיוון שמתקיים \(360 = 2^3 \cdot 3^2 \cdot 5\).

  4. קראו מספר בינארי מהמשתמש שמכיל רק את הספרות 0 ו-1 והדפיסו את ההצגה העשרונית של אותו מספר. לדוגמא, עבור 111 יודפס 7, ועבור 1011 יודפס 11.