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

Βοηθεια με c


ChristosFis

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

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

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

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

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

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

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

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

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

Σύνδεση

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

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