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

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

Δημοσ.

Καλησπέρα! Έγραψα ένα μικρό προγραμματάκι, προσπαθώντας να ξαναθυμηθώ τη C, και σκέφτηκα να το δημοσιεύσω εδώ. Είναι ένα μικρό κουίζ για τη γλώσσα C με 8 ερωτήσεις. Όσοι γνωρίζουν τη γλώσσα μάλλον θα βρούν εύκολο τόσο το πρόγραμμα όσο και τις ερωτήσεις. Οι απαντήσεις για τις ερωτήσεις μπορούν να βρεθούν σε βιβλία για τη γλώσσα, αλλά και σε ιστοσελίδες όπως η https://en.wikipedia.org/wiki/C_(programming_language) και η https://en.cppreference.com/w/c/language . Να σημειωθεί ότι μπορεί να υπάρχουν λάθη, καλύτερες υλοποιήσεις και ορθότερες απαντήσεις.


/*
    Μικρό παιχνίδι ερωτήσεων/απαντήσεων για τη γλώσσα προγραμματισμού C!
    Κυριάκος, 24/4/2020
*/


#include <stdio.h>

/* Μεταβλητή που συγκρατεί τον αριθμό των σωστών απαντήσεων */
unsigned int correct_answers = 0;


/* Συνάρτηση που θέτει την ερώτηση, τις πιθανές απαντήσεις 1 μέχρι 4, συγκρατεί τον αριθμό της
   σωστής απάντησης, δέχεται είσοδο απ' τον χρήστη και απαντάει σ' αυτόν το αποτέλεσμα */
void do_quiz(char *question, char *answer_1, char *answer_2, char *answer_3, char *answer_4, unsigned int answer)
{
    /* Στη μεταβλητή αυτή θα αποθηκεύσουμε αργότερα την επιλογή του χρήστη */
    unsigned int user_answer;

    /* Τυπώνουμε την ερώτηση και τις πιθανές απαντήσεις */
    printf("\n%s\n\n 1. %s\n 2. %s\n 3. %s\n 4. %s\n\n", question, answer_1, answer_2, answer_3, answer_4);     
    
    /* Ζητάμε από τον χρήστη την απάντηση και την αποθηκεύουμε στη μεταβλητή */
    scanf("%1u", &user_answer);

    /* Είναι η απάντηση που έδωσε ο χρήστης σωστή ή λάθος; Εκτυπώνουμε την απάντηση */
    if(user_answer == answer) {
        printf("\nΣωστά!\n\n");
        /* Απάντησε σωστά οπότε αυξάνουμε κατά ένα τη μεταβλητή με τον αριθμό σωστών απαντήσεων */
        correct_answers++;
    }
    else
        printf("\nΛάθος, το σωστό είναι το %u\n\n", answer);         
}


int main(void)
{
    printf("\nΚαλωσήλθατε στο παιχνίδι για τη γλώσσα C! Επιλέξτε από το 1 μέχρι το 4\n");

    /* Αρχίζουμε τις ερωτήσεις! */

    do_quiz("Ποιος και πότε δημιούργησε τη γλώσσα C;", \
            "Ο Linus Torvalds το 1991", \
            "Ο Dennis Ritchie το 1972", \
            "Ο Bjarne Stroustrup το 1985", \
            "Ο Bill Gates το 1975", \
            2);

    do_quiz("Ένα αρχείο κεφαλίδας:", \
            "Περιέχει δηλώσεις που μπορούν να χρησιμοποιηθούν από τον υπόλοιπο κώδικα", \
            "Περιέχει τον αντικειμενικό κώδικα του προγράμματος", \
            "Περιέχει οδηγίες σχετικά με το πως λειτουργεί ο μεταγλωττιστής", \
            "Περιέχει απλώς κάποια σχόλια σχετικά με το πως λειτουργεί το πρόγραμμα", \
            1);

    do_quiz("Τι είναι μια συνάρτηση main();", \
            "Εκτυπώνει τα περιεχόμενα της μνήμης που χρησιμοποιεί το πρόγραμμα", \
            "Είναι μια συνάρτηση που την ορίζει αν θέλει ο προγραμματιστής", \
            "Δεν είναι συνάρτηση, είναι καθολική μεταβλητή", \
            "Είναι η συνάρτηση που καλείται πάντα πρώτη κατά την εκκίνηση του προγράμ.", \
            4);

    do_quiz("Σε τι χρησιμεύει το void πριν το όνομα στον ορισμό μιας συνάρτησης;", \
            "Δείχνει ότι η συνάρτηση επιστρέφει για τιμή έναν χαρακτήρα", \
            "Δείχνει ότι το πρόγραμμα είναι για τη γλώσσα C++", \
            "Δείχνει ότι η συνάρτηση δεν επιστρέφει κάποια τιμή", \
            "Δείχνει ότι η συνάρτηση επιστρέφει έναν δείκτη", \
            3);

    do_quiz("Tι κάνει το for(;;) {.. } ;", \
            "Είναι βρόχος που επαναλαμβάνει τις εντολές που ακολουθούν μόνο δύο φορές", \
            "Είναι βρόχος που εκτελεί την εντολή που ακολουθεί μόνο μία φορά", \
            "Είναι βρόχος που επαναλαμβάνει συνέχεια τις εντολές που ακολουθούν", \
            "Είναι βρόχος που αποκλείει τις εντολές που ακολουθούν", \
            3);

    do_quiz("Tι είναι ένας δείκτης στη C;", \
            "Είναι μεταβλητή που έχει για τιμή την διεύθυνση μνήμης μιας άλλης μεταβλ.", \
            "Είναι μεταβλητή τύπου χαρακτήρα", \
            "Είναι μεταβλητή γενικού τύπου", \
            "Είναι μεταβλητή που χρησιμοποιείται για αποθήκευση πραγματικών αριθμών", \
            1);

    do_quiz("Σε τι χρησιμεύει η συνάρτηση malloc();", \
            "Τυπώνει στην κονσόλα διάφορες πληροφορίες για τη μνήμη", \
            "Εκχωρεί τη ζητούμενη μνήμη για χρήση μέσω κάποιου δείκτη", \
            "Διαγράφει τα περιεχόμενα της μνήμης", \
            "Είναι garbage collector", \
            2);

    do_quiz("Το union:", \
            "Συνενώνει αλφαριθμητικά", \
            "Συνενώνει δομές", \
            "Είναι πίνακας ειδικού τύπου για χρήση μόνο ακέραιων αριθμών", \
            "Αποθηκεύει διαφορετικούς τύπους δεδομένων στην ίδια περιοχή μνήμης", \
            4);

    /* Εκτυπώνουμε τον αριθμό τον σωστών απάντησεων */

    printf("\nΑπαντήσατε σωστά σε %u ερωτήσεις!\n\n", correct_answers);

    return 0;
}

824616797_2020-04-2417-10-15.png.cb5a1daf5aace101aa37636a1ee0e165.png

  • Like 1
Δημοσ.

Δύο πραγματάκια.

Το πιο σημαντικό είναι ότι, εφόσον περνάς string literals στη do_quiz(), πρέπει να είναι "const char*", και για να σταματήσει να διαμαρτύρεται ο compiler αλλά και για να αποφύγεις κατά λάθος αλλαγή.

Το δεύτερο, είναι ότι πολλά από τα σχόλια σου είναι άχρηστα. Αν ήμουν στη θέση σου, θα άφηνα μόνο το πάνω-πάνω και αυτό που περιγράφει τη do_quit(). Για να μη παρεξηγηθώ, δε λέω ότι τα σχόλια γενικά είναι άχρηστα, αλλά πρέπει να ξέρουμε πότε να τα βάζουμε. Ένας "κανόνας" που ακολουθώ είναι να ρωτάω τον εαυτό μου "Αν επιστρέψω μετά από χρόνια, θα μπορώ να καταλάβω με τη μία τι κάνει αυτό?".

Δημοσ.

Καλησπέρα, φίλε ! 

Το πρόγραμμα λειτουργεί τέλεια και ειλικρινά χαίρομαι πάρα πολύ να βλέπω κάτι τέτοια. Μου θυμίζουν τα τέλη της δεκαετίας του 80 ή τις αρχές της δεκαετίας του 90, τότε που προσπαθούσα να κάνω τα πρώτα βήματα στον προγραμματισμό πάνω σ' έναν ταπεινό Amstrad CPC 464 που έτρεχε στα 4MHz. Αργότερα, το 1991, μέσω προγράμματος απόσυρσης των παλιών 8μπιτων υπολογιστών, μπορέσαμε ν' αποκτήσουμε τον Amstrad 1640. Εκεί άρχισα να μαθαίνω σιγά-σιγά GWBASIC και μετά Turbo Pascal 3.0. Αργότερα, μέσα από ένα άρθρο του θρυλικού περιοδικού PC Master ήρθα σε μια πρώτη επαφή με την Turbo Prolog 2.0 της Borland. Την Prolog τη χρησιμοποιώ αδιάλειπτα μέχρι σήμερα!

Να είσαι πάντα καλά, σ' ευχαριστώ !!!

Ο Άσπρος Γάτος

Υ.Γ : Δυστυχώς δεν ευχήθηκα στο Insomnia για το Πάσχα, αλλά φταίει η καραντίνα που μ' έχει κουράσει ψυχολογικά. Όπως καταλαβαίνετε, καθότι γάτος, δε μου αρέσει καθόλου η ζωή μέσα στο διαμέρισμα και έχω ταράξει τον ιδιοκτήτη μου στα νιαουρίσματα για να συμπληρώσει ακόμα μια φορά το κουτάκι Β6 στη φόρμα μετακίνησης... Χρόνια πολλά σε όλους !

  • Like 3
  • Thanks 1
Δημοσ. (επεξεργασμένο)

GReaperEx ειδικά για το const έχεις δίκιο, παράλειψη μου. Τα σχόλια πιο πολύ τα έβαλα για τους πιο αρχάριους που ίσως να διαβάσουν τον κώδικα.

White_Cat πολύ ωραίες εποχές αυτές που περιγράφεις.

Επεξ/σία από cvb~
Δημοσ.

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

Με αυτό τον τρόπο με ένα πρόγραμμα λειτουργουν πολλα quiz. Εντέλει η μηχσνοποίηση είναι και η ουσία του προγραμματισμού. Αλλιώς γράφεις το quiz σε word και τις απαντήσεις στο τέλος. 

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

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

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

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

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

Σύνδεση

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

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