לדלג לתוכן

4.4 זכרון דינמי פתרון

תרגיל 1 – הקצאת מערך בגודל קלט מהמשתמש

  1. כתבו תוכנית ש:

    • שואלת את המשתמש כמה מספרים שלמים הוא רוצה להכניס.

    • מקצה מערך בגודל המתאים בעזרת malloc.

    • קוראת את המספרים מהמשתמש ושומרת אותם במערך.

    • מדפיסה את המספרים אחד אחד.

    • מבצעת free בסיום.

תרגיל 2 – הקצאה ואיפוס של מערך

  1. כתבו תוכנית ש:

    • מקצה מערך בגודל 100 מסוג char בעזרת calloc.

    • ממלא כל תא בערך 'A' באמצעות לולאה.

    • מדפיסה את המערך.

    • משחררת את הזיכרון עם free.


פתרונות

פתרון 1

#include <stdio.h>
#include <stdlib.h>

int main() {
    int n;
    printf("כמה מספרים תרצה להזין? ");
    scanf("%d", &n);

    int *arr = malloc(n * sizeof(int));
    if (arr == NULL) return 1;

    for (int i = 0; i < n; i++) {
        printf("הכנס מספר %d: ", i + 1);
        scanf("%d", &arr[i]);
    }

    printf("המספרים שהוזנו:\n");
    for (int i = 0; i < n; i++) {
        printf("%d ", arr[i]);
    }
    printf("\n");

    free(arr);
    return 0;
}

פתרון 2

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main() {
    char *buf = calloc(100, sizeof(char));
    if (!buf) return 1;

    for (int i = 0; i < 100; i++) {
        buf[i] = 'A';
    }

    buf[99] = '\0'; // נוודא שזה נגמר בתו סיום
    printf("%s\n", buf);

    free(buf);
    return 0;
}