Τρίτη 22 Σεπτεμβρίου 2015

Μια άσκηση από βιβλίο του Λυκείου σε Μ2000

Αυτή η "λύση", δεν έχει καμία σχέση με την κανονική λύση σε ΓΛΩΣΣΑ.
Το μόνο κοινό που θα έχει μια λύση είναι ο στόχος, το αποτέλεσμα. Έφτιαξα δυο προγράμματα, ένα απλό που δίνει την λύση με στοιχεία που διαβάζει από Σειρές και ένα δεύτερο που φτιάχνει μόνο του τα δεδομένα με προδιαγραφές. Η κανονική άσκηση θέλει να περάσει κανείς 22Χ22 τιμές...με το χέρι! Φυσικά δεν το θέλει απλά θέλει να φαίνεται ότι έτσι θα γίνει στο πρόγραμμα!

Αυτή εδώ είναι η εξομοίωση!
Για Wine, στο Linux, μπήκε το =0 στον ορισμό του πίνακα, ώστε να εμφανίζονται οι μηδενικές τιμές. (σε Windows δεν υπήρχε πρόβλημα)


φορμα 50,32 \\ 50 χαρακτήρες πλάτος επί 32 γραμμές χαρακτήρων
οθονη 1,0 : πένα 14
διπλα
αναφορά 2, "ΑΣΚΗΣΗ 8"
κανονικα
οθονη, 2
τύπωσε @(7);
αναφορά {Στην αρχή της ποδοσφαιρικής περιόδου οι 22 παίκτες μιας ομάδας, οι οποίοι
            αριθμούνται από 1 έως 22, ψηφίζουν για τους 3 αρχηγούς που θα τους
            εκπροσωπούν. Κάθε παίκτης μπορεί να ψηφίσει όσους συμπαίκτες του θέλει,
            ακόμα και τον εαυτό του. Τα αποτελέσματα της ψηφοφορίας καταχωρίζονται
            σε έναν πίνακα ΨΗΦΟΣ με 22 γραμμές και 22 στήλες, έτσι ώστε το στοιχείο
            ΨΗΦΟΣ[i,j] να έχει την τιμή 1, όταν ο παίκτης με αριθμό i έχει ψηφίσει τον
            παίκτη με αριθμό j, και τιμή 0 στην αντίθετη περίπτωση. Να γράψετε
            πρόγραμμα το οποίο:
            Δ1. Να διαβάζει τα στοιχεία του πίνακα ΨΗΦΟΣ και να ελέγχει την ορθότητά
            τους με αποδεκτές τιμές 0 ή 1.
            Δ2. Να εμφανίζει το πλήθος των παικτών που δεν ψήφισαν κανέναν.
            Δ3. Να εμφανίζει το πλήθος των παικτών που ψήφισαν τον εαυτό τους.
            Δ4. Να βρίσκει τους 3 παίκτες που έλαβαν τις περισσότερες ψήφους και να
            εμφανίζει τους αριθμούς τους και τις ψήφους που έλαβαν. Θεωρήστε ότι δεν
            υπάρχουν ισοψηφίες.
            }
τυπωσε υπο
αναφορά 2, "Πάτα ένα πλήκτρο"
α$=κομ$
οθονη,0
διπλα
αναφορά 2, "Επεξεργασία"
κανονικα
ανανεωση
οθονη,2
ανανεωση 5000
πινακας ψηφος(22,22)
=0
δεν_ψηφισε=0
ψηφίστηκε=0
μέγιστοι_ψήφοι=τυχαίος(17,21)
δεν_ψηφίζουν=τυχαίος(2,6)
για π=0 εως 21 { \\ διαβάζω ανά σειρά
      αθροισμα=0 \\ θα βάζω το άθροισμα ψήφων, 0 σημαίνει δεν ψήφισε
      αν δεν_ψηφίζουν>0 και τυχαιος(5)=5 τοτε {
                  δεν_ψηφισε++
                  δεν_ψηφίζουν--
      } αλλιως {
            ποσότητα= μέγιστοι_ψήφοι
            μέγιστοι_ψήφοι--
            για ψψ=0 εως ποσότητα { \\αλλαξα το 21 με το ποσότητα
                  επανελαβε { ψ=τυχαιος(0,21) } μεχρι ψηφος(π,ψ)=0 : Χ=1
                  αν Χ=0 ή Χ=1 τότε { ψηφος(π, ψ)=Χ } αλλιως λάθος "Δεν έβαλες 0 ή 1 για ψήφο"
                  αθροισμα+=Χ
                  αν ψ=π και Χ=1 τοτε ψηφίστηκε++ \\αν έχει ψήφο στον εαυτό του
            }
      \\ αν αθροισμα=0 τότε δεν_ψηφισε++
      }
}
τύπωσε μέρος "Α/Α",@(3),
για ν=0 εως 21 { τύπωσε δεξι$(μορφη$(" {0}",ν+1), 2) ;}
τύπωσε υπο
για ν=0 εως 21 {
      τύπωσε γραφη$(ν+1,"00)");
      για ψ=0 εως 21 {
            πενα 15+(ν=ψ)*4 { τύπωσε " ";ψηφος(ν, ψ); }
      }
      αν ν<21 τοτε { τυπωσε } αλλιως τυπωσε υπο
}


τύπωσε μερος "Δεν ψήφισε κανέναν "; δεν_ψηφισε
τυπωσε
τύπωσε μερος "Ψήφισαν τον εαυτό τους "; ψηφίστηκε
τυπωσε
μεγιστο=0
ποιος=0
για ν=0 εως 21 { \\ για κάθε παίκτη οι ψήφοι - κάθετα τώρα
      για ψ=1 εως 21 { \\αθροίζω τους ψήφους στη πρώτη σειρά
            ψηφος(0,ν)+=ψηφος(ψ,ν)
      }
      \\ βγάζω και τον καλύτερο, και κρατάω και το ποιος είναι!
      αν μέγιστο<ψηφος(0,ν) τότε ποιος=ν : μέγιστο=ψήφος(0,ν)
}
\\ δεν δίνω από 0 το νούμερο παίκτη αλλά από ένα
Τύπωσε μερος "1ος είναι ο Νο ";ποιος+1; " με ";ψηφος(0,ποιος); " ψήφους"
Τύπωσε
\\ έχω τον 2ο και 3ο
για ακόμη=2 εως 3 {
       ψηφος(0,ποιος)=0: μέγιστο=0 \\ μηδενίζω τον προηγούμενο καλύτερο
       για ν=0 εως 21 { \\ κοιτάω μόνο την πρώτη σειρά
             αν μέγιστο<ψηφος(0,ν) τότε ποιος=ν : μέγιστο=ψήφος(0,ν)
       }
      Τύπωσε μερος "";ακόμη;"ος είναι ο Νο ";ποιος+1; " με ";ψηφος(0, ποιος); " ψήφους"
      Τύπωσε
}
ανανεωση 40
α$=κομ$
οθονη,0





Αυτή είναι η απλή έκδοση με 4Χ4 πίνακα

\\ Ενότητα 9.3 Άσκηση 8 στη σελίδα 21 του
\\ ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ
\\ Γ' Λυκείου
\\ αντί για 22 παίκτες δουλεύει για 4.
\\ η πρώτη στήλη είναι οι ψήφοι του πρώτου
\\ μόνο ο πρώτος ψήφισε τον εαυτό του
\\ ο τέταρτος δεν ψήφισε κανένα
\\ ο πρώτος θα βγει πρώτος
\\ ο τέταρτος θα βγει δεύτερος
\\ ο τρίτος θα βγει τρίτος



\* Δεδομένα
Σειρά 1,0,0,1 \\ σειρά και ψηφοδέλτιο, θα διαβαστούν από τη Διάβασε
Σειρά 1,0,1,0
Σειρά 1,0,0,1
Σειρά 0,0,0,0
\* Μεταβλητές
πινακας ψηφος(4,4)
=0
καθαρο δεν_ψηφισε, ψηφίστηκε, άθροισμα, μέγιστο, ποιος


\*Το πρόγραμμα έχει δυο μέρη, το δεύτερο έχει δυο φάσεις
\* 1ο μέρος
\*Θα χρησιοποιήσουμε την πρώτη σειρά για να αθροίσουμε τις στήλες.
\*Αφού παραλάβουμε τα ψηφοδέλτια!
\*Στη παραλαβή θα ξέρουμε πόσοι δεν ψήφισαν κανένα
\* και πόσοι ψήφισαν τον εαυτό τους


για π=0 εως 3 { \\ διαβάζω ανά σειρά
      αθροισμα=0 \\ θα βάζω το άθροισμα ψήφων, 0 σημαίνει δεν ψήφισε
      για ψ=0 εως 3 { \\διαβάζω ανά ψήφο
            διάβασε Χ
            αν Χ=0 ή Χ=1 τότε { ψηφος(π, ψ)=χ } αλλιως λάθος "Δεν έβαλες 0 ή 1 για ψήφο"
            αθροισμα+=Χ
            αν ψ=π και χ=1 τοτε ψηφίστηκε++ \\αν έχει ψήφο στον εαυτό του
      }
      αν αθροισμα=0 τότε δεν_ψηφισε++
}
τύπωσε "δεν ψήφισε κανέναν "; δεν_ψηφισε
τύπωσε "Ψήφισαν τον εαυτό τους "; ψηφίστηκε


\* 2ο Μέρος, φάση 1η: θα αθροίσουμε τις ψήφους και θα βρούμε τον καλύτερο


για ν=0 εως 3 { \\ για κάθε στήλη ψήφων
      για ψ=1 εως 3 { \\αθροίζω τους ψήφους στο πρώτο
            ψηφος(0,ν)+=ψηφος(ψ,ν)
      }
      αν μέγιστο<ψηφος(0,ν) τότε ποιος=ν : μέγιστο=ψήφος(0,ν)
}
Τύπωσε "1ος είναι ο Νο ";ποιος+1; " με ";ψηφος(0,ποιος); " ψήφους"
\* 2ο Μέρος, φάση 3η: Τώρα θα βρούμε τους άλλους δύο, μηδενίζοντας
\* τον προηγούμενο καλύτερο!


για ακόμη=2 εως 3 {
ψηφος(0,ποιος)=0: μέγιστο=0 \\ τώρα δεν θα ξαναβγεί ο πρώτος!
για ν=0 εως 3 {
αν μέγιστο<ψηφος(0,ν) τότε ποιος=ν : μέγιστο=ψήφος(0,ν)
}
Τύπωσε "";ακόμη;"ος είναι ο Νο ";ποιος+1; " με ";ψηφος(0, ποιος); " ψήφους"
}

Δεν υπάρχουν σχόλια:

Δημοσίευση σχολίου

You can feel free to write any suggestion, or idea on the subject.