Προς το περιεχόμενο

Προτεινόμενες αναρτήσεις

Δημοσ. (επεξεργασμένο)

Kαλησπέρα θα μπορούσε κάποιος να βόηθησει στο θέμα αυτό . Η γλωσσα προγραμματισμου είναι C

Screenshot_8.jpg

Επεξ/σία από ChristosFis
Δημοσ. (επεξεργασμένο)

Η σωστή απάντηση είναι πως η ερώτηση είναι ημιτελής.

Η standard C δεν το επιτρέπει αλλά ο GNU C compiler το επιτρέπει. 

Επίσης, δεν υπάρχει ερώτημα Γ.

Γενικά παρατηρείται ένα θεματάκι με το πόσο ακριβής είναι ο γραπτός λόγος που χρησιμοποιείς και που διαβάζεις. 

Επεξ/σία από DrKo
Δημοσ. (επεξεργασμένο)
33 λεπτά πριν, DrKo είπε

Η σωστή απάντηση είναι πως η ερώτηση είναι ημιτελής.

Η standard C δεν το επιτρέπει αλλά ο GNU C compiler το επιτρέπει. 

Επίσης, δεν υπάρχει ερώτημα Γ.

Γενικά παρατηρείται ένα θεματάκι με το πόσο ακριβής είναι ο γραπτός λόγος που χρησιμοποιείς και που διαβάζεις. 

δικό μου  λαθος εννοουσα ολο το θέμα αυτο αν μπορούσε να με βοηθήσει κάποιος. 

Το θέμα βασίζεται  στο κομμάτι του πολυμορφισμού  στην ευελιξία και στην μετατροπή τύπων

Επεξ/σία από ChristosFis
Επισκέπτης
Δημοσ. (επεξεργασμένο)

Μπορείς να κάνεις πατέντα με macros και να φιάξεις κάτι σαν τα templates της C++. Δεν νομίζω ότι σε πανεπιστήμιο έχει ασχοληθεί κανείς με macros οπότε ξέχασε το.

Αλλιώς γράφεις όλες τις πιθανές εκδοχές της συνάρτησης σου π.χ. add_int(...), add_float(...), add_double(...) για int, float, double κλπ. Μάλλον στην εκφώνηση σε περιορίζει στο πώς θα ονομάσεις την συνάρτηση, οπότε ξέχασε το και αυτό.

Το μόνο που μου έρχεται στο μυαλό και δέν μου πολυαρέσει κιόλας σαν λύση είναι αυτό:

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

void add(const char *type, void *a, void *b, void *c, int size) {
    if (strcmp(type, "int") == 0) {
        for (int i = 0; i < size; i++) {
            ((int *)c)[i] = ((int *)a)[i] + ((int *)b)[i];
        }
    } else if (strcmp(type, "float") == 0) {
        for (int i = 0; i < size; i++) {
            ((float *)c)[i] = ((float *)a)[i] + ((float *)b)[i];
        }
    }
}

int main() {
    int *a = malloc(4 * sizeof(int));
    int *b = malloc(4 * sizeof(int));
    int *c = malloc(4 * sizeof(int));
    for (int i = 0; i < 4; i++) {
        a[i] = i;
        b[i] = i;
        c[i] = 0;
    }
    add("int", a, b, c, 4);
    for (int i = 0; i < 4; i++) {
        printf("%d ", c[i]);
    }
    free(a);
    free(b);
    free(c);
    return 0;
}

 

Επεξ/σία από xorz57
Δημοσ.
Στις 8/6/2022 στις 6:17 ΜΜ, xorz57 είπε

Μπορείς να κάνεις πατέντα με macros και να φιάξεις κάτι σαν τα templates της C++. Δεν νομίζω ότι σε πανεπιστήμιο έχει ασχοληθεί κανείς με macros οπότε ξέχασε το.

Αλλιώς γράφεις όλες τις πιθανές εκδοχές της συνάρτησης σου π.χ. add_int(...), add_float(...), add_double(...) για int, float, double κλπ. Μάλλον στην εκφώνηση σε περιορίζει στο πώς θα ονομάσεις την συνάρτηση, οπότε ξέχασε το και αυτό.

Το μόνο που μου έρχεται στο μυαλό και δέν μου πολυαρέσει κιόλας σαν λύση είναι αυτό:

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

void add(const char *type, void *a, void *b, void *c, int size) {
    if (strcmp(type, "int") == 0) {
        for (int i = 0; i < size; i++) {
            ((int *)c)[i] = ((int *)a)[i] + ((int *)b)[i];
        }
    } else if (strcmp(type, "float") == 0) {
        for (int i = 0; i < size; i++) {
            ((float *)c)[i] = ((float *)a)[i] + ((float *)b)[i];
        }
    }
}

int main() {
    int *a = malloc(4 * sizeof(int));
    int *b = malloc(4 * sizeof(int));
    int *c = malloc(4 * sizeof(int));
    for (int i = 0; i < 4; i++) {
        a[i] = i;
        b[i] = i;
        c[i] = 0;
    }
    add("int", a, b, c, 4);
    for (int i = 0; i < 4; i++) {
        printf("%d ", c[i]);
    }
    free(a);
    free(b);
    free(c);
    return 0;
}

 

εν τελει βγήκε με την τεχνική της qsort  και αναλογως τι εχουμε int ,float ,struct καναμε τα καταλληλα casting

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα
  • Δημιουργία νέου...