Οδηγός Μελέτης - Εισαγωγή στον Προγραμματισμό

Α17.13 · Η συνάρτηση compute

Εξέταση Ιανουαρίου 2026, Θέμα 2 · Δυσκολία ★★☆ · trace · Κεφάλαια: 17, 13, 12

Η συνάρτηση compute (15 Μονάδες)

int *compute(const int *a, size_t na, const int *b, size_t nb) {
    size_t i = 0, j = 0, k = 0;
    int * out = malloc((na + nb) * sizeof(int));
    while (i < na && j < nb) {
        if (a[i] <= b[j])
            out[k++] = a[i++];
        else
            out[k++] = b[j++];
    }
    while (i < na)
        out[k++] = a[i++];
    while (j < nb)
        out[k++] = b[j++];
    return out;
}
  1. Τι κάνει η συνάρτηση compute (μέχρι 15 λέξεις εξήγηση);
  2. Ποιο θα είναι το περιεχόμενο της μεταβλητής result μετά την εκτέλεση της παρακάτω ακολουθίας εντολών και σε ποια κατηγορία μνήμης είναι αποθηκευμένο;

    int arg1[] = {71, 111, 111, 100, 32, 0};
    int arg2[5] = {'j', 111, 98, '!', 0};
    int * result = compute(arg1, 3, arg2, 2);
    
  3. Υπάρχει κάποιο σφάλμα στην συνάρτηση compute; Αιτιολογήστε την απάντησή σας.

Στο τέλος του φυλλαδίου δίνεται πίνακας ASCII ως βοήθημα.

Υπόδειξη

Δείτε το βήμα που επαναλαμβάνεται: συγκρίνει τα δύο “τρέχοντα” στοιχεία και παίρνει το μικρότερο· σε ποιον αλγόριθμο ταξινόμησης είναι αυτό το βασικό βήμα και τι υποθέτει για τις εισόδους; Για το result προσέξτε ότι χρησιμοποιούνται μόνο τα πρώτα na και nb στοιχεία, και ξεχωρίστε πού ζει ο δείκτης από πού ζουν τα δεδομένα στα οποία δείχνει. Για το σφάλμα, σκεφτείτε τι μπορεί να επιστρέψει η malloc.

Αριθμός στον οδηγό: Α17.13 (στο κεφάλαιο) · Μόνιμο αναγνωριστικό: exam-2026-jan-q2 · Σύνδεσμος: https://progintro.github.io/study/questions/exams/exam-2026-jan-q2.html · Markdown (GitHub)