Ασκήσεις

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

Συντονιστές: WebDev Moderators, Super-Moderators

Απάντηση
Άβαταρ μέλους
xmavidis
Honorary Member
Δημοσιεύσεις: 1217
Εγγραφή: 02 Δεκ 2003 19:59
Τοποθεσία: Ηράκλειο

Ασκήσεις

Δημοσίευση από xmavidis » 19 Οκτ 2005 21:42

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

Κώδικας: Επιλογή όλων

Να γίνει πρόγραμμα το οποίο θα δέχεται έναν ακέραιο αριθμό και αν αυτός διαιρείται με το 3 και με το 4  θα εμφανίζει το διπλάσιο του, ενώ σε διαφορετική περίπτωση θα εμφανίζει το τριπλάσιο του.
Η λύση του:

Κώδικας: Επιλογή όλων

ΠΡΟΓΡΑΜΜΑ Ασκηση1

ΜΕΤΑΒΛΗΤΕΣ
       ΑΚΕΡΑΙΕΣ: χ, τιμή

ΑΡΧΗ

          ΓΡΑΨΕ "Δώσε έναν ακέραιο αριθμό"
            ΔΙΑΒΑΣΕ χ

ΑΝ χ MOD 3 = 0 και χ MOD 4 = 0 TOTE

        τιμή <-- 2*χ

       ΓΡΑΨΕ "Το διπλάσιο του ",χ," είναι το ",τιμή

ΑΛΛΙΩΣ

        τιμή <-- 3*χ
        ΓΡΑΨΕ "Το τριπλάσιο του ",χ," είναι το ",τιμή
ΤΕΛΟΣ_ΑΝ

ΤΕΛΟΣ Ασκηση1
Αν έχετε κάποια άλλη λύση να προτείνετε κάντε το!


:wink:

Άβαταρ μέλους
dva_dev
Script Master
Δημοσιεύσεις: 3790
Εγγραφή: 16 Σεπ 2005 01:32
Επικοινωνία:

Ασκήσεις

Δημοσίευση από dva_dev » 20 Οκτ 2005 01:17

Να υποθέσω πως εννοείς να διαιρείται ακριβώς με το 3 και το 4;

Σύμφωνα με το βιβλίο αριθμητικής της 5ης Δημοτικού (το φετινό βιβλίο):

Για να υπολογίσεις αν διαιρείται ακριβώς
α) με το 4 μπορείς να κάνεις το εξής:
Διαιρείς τον αριθμό με το 2 και αν το τελευταίο ψηφίο είναι 0,2,4,6 ή 8 ο αριθμός σου διαιρείται ακριβώς.
β) με το 3 αρκεί το μονοψήφιο άθροισμα των ψηφίων του να είναι 3,6 ή 9

Αν ισχύουν τα α) και β) τύπωσε το διπλάσιο του αριθμού, αλλιώς το τριπλάσιο.

Δεν νομίζω πως θα κάτσει κανένας να υλοποιήσει αυτή τη λύση, μάλλον θα προτιμήσει αυτή του xmavidis (εκτός αν υπάρχει περίπτωση να παίζει με πολύ μεγάλα νούμερα στα οποία δεν θα μπορεί να χρησιμοποιήσει την MOD (που με την ευκαιρία δεν ταιριάζει σε ελληνικό ψευδοκώδικα) και οι αριθμοί θα πρέπει πιθανώς λόγω μεγέθους να αποθηκευτούν σε string. Σε τέτοια περίπτωση θα υπάρχει ένα μικρό πρόβλημα με τη διαίρεση με το 2 αλλά καλύτερα ένα πρόβλημα με διαίρεση σε string παρά ένα με υπόλοιπο.

Αυτό απλώς για να μπεί και μια δεύτερη απάντηση.

Άβαταρ μέλους
xmavidis
Honorary Member
Δημοσιεύσεις: 1217
Εγγραφή: 02 Δεκ 2003 19:59
Τοποθεσία: Ηράκλειο

Ασκήσεις

Δημοσίευση από xmavidis » 20 Οκτ 2005 18:22

Στο σχολείο μαθαίνουμε το mod για το ακέραιο υπόλοιπο και το div για το ακέραιο πηλίκο δύο αριθμών ή παραστάσεων.

Πολύ ωραία λύση κι αυτή! :)
Τα ζητούμενα της άσκησης ήταν για τις τιμές 3,4 οπότε δε χρειαζόταν κάτι άλλο.
I want to know God’s thoughts; the rest are details.
Albert Einstein

Άβαταρ μέλους
cherouvim
Script Master
Δημοσιεύσεις: 3137
Εγγραφή: 13 Ιούλ 2005 22:56
Τοποθεσία: Athens, Greece
Επικοινωνία:

Ασκήσεις

Δημοσίευση από cherouvim » 21 Οκτ 2005 06:51

php:
echo ($x%3==0&&$x%4==0?$x*2:$x*3);

Java:
System.out.println(x%3==0&&x%4==0?x*2:x*3);

Άβαταρ μέλους
dva_dev
Script Master
Δημοσιεύσεις: 3790
Εγγραφή: 16 Σεπ 2005 01:32
Επικοινωνία:

Ασκήσεις

Δημοσίευση από dva_dev » 22 Οκτ 2005 20:02

Εννούσα όταν έλεγα για μεγάλα νούμερα όχι το 3 και το 4 αλλά να δώσει ο χρήστης σαν input κάτι σαν το:

29875875342398754398753487864 :o

που θα δυσκολευτεί να υπολογίσει η mod και η div.
Σε τέτοια περίπτωση (αν δεν έχεις βάλει περιορισμούς) θα πρέπει να καταφύγεις σε άλλους αλγόριθμους. :cry:


Άβαταρ μέλους
dva_dev
Script Master
Δημοσιεύσεις: 3790
Εγγραφή: 16 Σεπ 2005 01:32
Επικοινωνία:

Ασκήσεις

Δημοσίευση από dva_dev » 24 Οκτ 2005 14:34

Το νούμερο κράτα το σαν string για να έχεις μια εύκολη γενική λύση. (Αφού και οι γλώσσες σαν string το παίρνουν και μετά το κάνουν parse για να το μετατρέψουν σε ακέραιο ή πραγματικό).

Άβαταρ μέλους
alkisg
Δημοσιεύσεις: 265
Εγγραφή: 03 Ιουν 2005 11:53
Τοποθεσία: Ιωάννινα
Επικοινωνία:

Ασκήσεις

Δημοσίευση από alkisg » 26 Οκτ 2005 08:10

Η ΓΛΩΣΣΑ δεν επιτρέπει πράξεις με strings, πέρα από τη συνένωση. Ούτε υποστηρίζει μετατροπή από string σε αριθμό και αντίθετα. Ο interpreter/compiler μετατρέπει τις σταθερές σε strings ή αριθμούς ανάλογα με την περίπτωση, και έτσι το πρόγραμμα δεν έχει "επαφή" με την αρχική string-αναπαράσταση ενός αριθμού.

Άβαταρ μέλους
dva_dev
Script Master
Δημοσιεύσεις: 3790
Εγγραφή: 16 Σεπ 2005 01:32
Επικοινωνία:

Ασκήσεις

Δημοσίευση από dva_dev » 26 Οκτ 2005 18:00

@alkisg: Μπορείς να εξηγήσεις λίγο πιο αναλυτικά τι εννοείς;

Εχεις υπ'οψην κάποια γλώσσα που δεν μπορείς να κάνεις αυτά που περιγράφεις;

Άβαταρ μέλους
xmavidis
Honorary Member
Δημοσιεύσεις: 1217
Εγγραφή: 02 Δεκ 2003 19:59
Τοποθεσία: Ηράκλειο

Ασκήσεις

Δημοσίευση από xmavidis » 27 Οκτ 2005 13:23

η ΓΛΩΣΣΑ που κάνουμε στο σχολείο δεν επιτρέπει μετατροπές του τύπου των μεταβλητών.
I want to know God’s thoughts; the rest are details.
Albert Einstein

Άβαταρ μέλους
xmavidis
Honorary Member
Δημοσιεύσεις: 1217
Εγγραφή: 02 Δεκ 2003 19:59
Τοποθεσία: Ηράκλειο

Ασκήσεις

Δημοσίευση από xmavidis » 27 Οκτ 2005 13:51

Παρακάτω παραθέτω μια άσκηση που έφτιαξα.
Περιμένω λύσεις :)

Κώδικας: Επιλογή όλων

!!
!! Nα γίνει πρόγραμμα που αφού διαβάσει μια γωνία
!! θα βρίσκει και θα εμφανίζει το ημίτονο και το συνημίτονο
!!  της γωνίας.
!! Στη συνέχεια να εμφανίζει σε πιο τεταρτημόριο βρίσκεται.
!! Τέλος, υπολογίζει τη τιμή της παράστασης&#58;
!!        - |- -  2ημ3χ, αν χΕ&#91;0,90&#93;
!!        - |- -  |ημχ - συνχ|, αν χΕ&#40;90,180&#93;
!!  f&#40;x&#41;  &#123;
!!        - |- -  2 + 3ημχ - συνχ , αν χΕ&#40;180,270&#93;  
!!        - |- -  2συν3χ , αν χΕ&#40;270,360&#41;
!!     
Τελευταία επεξεργασία από το μέλος xmavidis την 30 Οκτ 2005 23:14, έχει επεξεργασθεί 2 φορές συνολικά.

Άβαταρ μέλους
dva_dev
Script Master
Δημοσιεύσεις: 3790
Εγγραφή: 16 Σεπ 2005 01:32
Επικοινωνία:

Ασκήσεις

Δημοσίευση από dva_dev » 27 Οκτ 2005 18:05

xmavidis έγραψε:η ΓΛΩΣΣΑ που κάνουμε στο σχολείο δεν επιτρέπει μετατροπές του τύπου των μεταβλητών.
Μάλλον έγινε παρανόηση. Δεν προσπαθείς να αλλάξεις τον τύπο της μεταβλητής (από Num1 τύπου ακέραιος να την κάνεις Num1 τύπου string) αλλά να αλλάξεις την αναπαράσταση του περιεχομένου της μεταβλητής. (Το περιεχόμενο της Num1 τύπου ακέραιος να το μετατρέψεις σε string και να το βάλεις στη Num2 τύπου string).

Για να γίνω λίγο πιό κατανοητός ένα παράδειγμα:
Σου ζητάει το πρόγραμμα να εισάγεις (με το πληκτρολόγιο) έναν αριθμό (ας πούμε από το 0 εως και το 99).
Εσύ αυτό που θέλεις να κάνεις είναι να δώσεις το νούμερο 35 οπότε πατάς τα πλήκτρα: [3] μετά το [5] και μετά το [ENTER]. Καθώς πατάς τα πλήκτρα αυτό που γίνεται είναι να αποθηκεύονται οι χαρακτήρες "3" και "5" σε έναν string buffer (σαν το string "35") τον οποίο κάνει μετά parse η γλώσσα (C, BASIC, PASCAL, ...) και το αποτέλεσμα (ο αριθμός 35 πλέον) το αποθηκεύει στην μεταβλητή π.χ. Num1 (τύπου ακέραιος πιθανώς).
Αν τώρα η μεταβλητή σου δεν είναι τύπου ακέραιος αλλά είναι τύπου string (και αυτό είναι που αναφέρω σε προηγούμενο post) δεν χρειάζεται να γίνει κανένα parse από τη γλώσσα και παίρνεις τα περιεχόμενα του buffer όπως έχουν, δηλαδή το string "35".
Τι κερδίζεις; Για μικρά νούμερα μέσα στα όρια που μπορεί να χειριστεί η γλώσσα αυτόματα, τίποτα! είναι και περισσότερος κόπος. Αλλά για νούμερα εκτός των ορίων αυτών μπορείς να χειριστείς εσύ το parsing και να κάνεις ότι πράξεις και ελέγχους θέλεις (βλ. απάντηση στην άσκηση).

Η μόνη γλώσσα που γνωρίζω ότι δεν έχει συναρτήσεις για μετατροπή από string σε αριθμό, κ.λπ. είναι η assembly (αν και δεν ξέρω πλέον τα σχετικά νεότερα πακέτα αν διαθέτουν έτοιμα macros), αλλά σου δίνει τη δυνατότητα να φτιάξεις εσύ ότι δεν υπάρχει έτοιμο (ή ψάχνεις να βρείς που υπάρχει υλοποημένο και το προσθέτεις στο πρόγραμμα σου).

Άβαταρ μέλους
alkisg
Δημοσιεύσεις: 265
Εγγραφή: 03 Ιουν 2005 11:53
Τοποθεσία: Ιωάννινα
Επικοινωνία:

Ασκήσεις

Δημοσίευση από alkisg » 28 Οκτ 2005 13:07

Η ΓΛΩΣΣΑ ορίζεται στο σχολικό βιβλίο της Γ' Λυκείου. Έχει καθαρά εκπαιδευτικό χαρακτήρα, δεν είναι "κανονική" γλώσσα προγραμματισμού.

Δεν υποστηρίζει καν τα string subscripts, δηλαδή δεν μπορείς να γράψεις s[1] και να πάρεις το πρώτο γράμμα ενός string.

Τέλος, ακόμα και αν διάβαζες τον αριθμό κατευθείαν σε μεταβλητή τύπου string, δεν υπάρχει τρόπος (στη ΓΛΩΣΣΑ) να τον μετατρέψεις σε ακέραιο για να κάνεις πράξεις (x mod 3) κτλ.

Άβαταρ μέλους
dva_dev
Script Master
Δημοσιεύσεις: 3790
Εγγραφή: 16 Σεπ 2005 01:32
Επικοινωνία:

Ασκήσεις

Δημοσίευση από dva_dev » 29 Οκτ 2005 22:12

Αν είναι ένα πρόγραμμα "ΓλωσσοΜάθεια", η έκδοση 8.1 που βρήκα, τα υποστηρίζει αυτά. Και substrings μπορείς να πάρεις και μετατροπή number<-->string μπορεί να γίνει. Ρίξε μια ματιά στο help. Δεν είναι και ότι καλύτερο αλλά από το τίποτα...

http://www.spinet.gr/

Κάπου λέει ότι χρησιμοποιεί τον Virtual Pascal Compiler για να παράξει το πρόγραμμα. Δεν έκατσα να το ψάξω παραπάνω, αλλά δεν βλέπω σε τι διαφέρει από μια "κανονική" γλώσσα προγραμματισμού (πέρα από το περιβάλλον το οποίο μου φαίνεται ανορθόδοξο να πω; παράξενο; )

Άβαταρ μέλους
alkisg
Δημοσιεύσεις: 265
Εγγραφή: 03 Ιουν 2005 11:53
Τοποθεσία: Ιωάννινα
Επικοινωνία:

Ασκήσεις

Δημοσίευση από alkisg » 30 Οκτ 2005 11:27

Όχι, η Γλωσσομάθεια δεν υλοποιεί την σχολική ΓΛΩΣΣΑ, έχει ένα σωρό εξωσχολικές επεκτάσεις και "απομεινάρια" από την εσωτερική μετάφραση που κάνει σε pascal.

Απάντηση

Επιστροφή στο “γλώσσες προγραμματισμού - γενικά”

Μέλη σε σύνδεση

Μέλη σε αυτήν τη Δ. Συζήτηση: Δεν υπάρχουν εγγεγραμμένα μέλη και 0 επισκέπτες