Παραθέτω στη συνέχεια ορισμένες λύσεις μαθητών
Νίκος Βασίλας, Θεσσαλονίκη
ΠΡΟΓΡΑΜΜΑ ΔΕΚΑΘΛΟ
ΣΤΑΘΕΡΕΣ
S=128
ΜΕΤΑΒΛΗΤΕΣ
ΑΚΕΡΑΙΕΣ: max,min,w,n,i,y[S],p[S],a[S]
ΑΡΧΗ
ΔΙΑΒΑΣΕ n
ΓΙΑ i ΑΠΟ 1 ΜΕΧΡΙ n
ΔΙΑΒΑΣΕ y[i],p[i]
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
max <-- y[1]
min <-- p[1]
ΓΙΑ i ΑΠΟ 2 ΜΕΧΡΙ n
ΑΝ y[i]>max ΤΟΤΕ
max <-- y[i]
min <-- p[i]
ΤΕΛΟΣ_ΑΝ
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΓΙΑ i ΑΠΟ 1 ΜΕΧΡΙ n
ΑΝ (y[i]=max) ΚΑΙ (p[i]<=min) ΤΟΤΕ
min <-- p[i]
ΤΕΛΟΣ_ΑΝ
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
w <-- 0
ΓΙΑ i ΑΠΟ 1 ΜΕΧΡΙ n
ΑΝ (y[i]=max) ΚΑΙ (p[i]=min) ΤΟΤΕ
w <-- w+1
a[w] <-- i
ΤΕΛΟΣ_ΑΝ
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΓΡΑΨΕ 'πλήθος νικητών=',w,' και είναι οι '
ΓΙΑ i ΑΠΟ 1 ΜΕΧΡΙ w
ΓΡΑΨΕ a[i]
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΤΕΛΟΣ_ΠΡΟΓΡΑΜΜΑΤΟΣ
Αν Ν το πλήθος των αθλητών και w το πλήθος των νικητών,
τότε το παραπάνω προγραμμα εκτελεί:
4*Ν + w επαναλήψεις
------------------------------------------------------------------------------
Νίκος Μυλωνάς, Θεσσαλονίκη,
Μακρίδης Ελευθέριος, Γιαννιτσά
ΠΡΟΓΡΑΜΜΑ DEKATHLO
ΣΤΑΘΕΡΕΣ
S=128
ΜΕΤΑΒΛΗΤΕΣ
ΑΚΕΡΑΙΕΣ: N,Y[S],P[S],A[S],i,j,temp,NIK
ΑΡΧΗ
ΔΙΑΒΑΣΕ N
ΓΙΑ i ΑΠΟ 1 ΜΕΧΡΙ N
ΔΙΑΒΑΣΕ Y[i],P[i]
A[i] <-- i
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΓΙΑ i ΑΠΟ 2 ΜΕΧΡΙ N
ΓΙΑ j ΑΠΟ N ΜΕΧΡΙ i ΜΕ ΒΗΜΑ -1
ΑΝ Y[j-1]<Y[j] ΤΟΤΕ
temp <-- Y[j-1]
Y[j-1] <-- Y[j]
Y[j] <-- temp
temp <-- P[j-1]
P[j-1] <-- P[j]
P[j] <-- temp
temp <-- A[j-1]
A[j-1] <-- A[j]
A[j] <-- temp
ΑΛΛΙΩΣ_ΑΝ (Y[j-1]=Y[j])ΚΑΙ (P[j-1]>P[j]) ΤΟΤΕ
temp <-- P[j-1]
P[j-1] <-- P[j]
P[j] <-- temp
temp <-- A[j-1]
A[j-1] <-- A[j]
A[j] <-- temp
ΤΕΛΟΣ_ΑΝ
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
NIK <-- 0
ΓΙΑ i ΑΠΟ 1 ΜΕΧΡΙ N
ΑΝ (Y[1]=Y[i]) ΚΑΙ (P[1]=P[i]) ΤΟΤΕ
NIK <-- NIK+1
ΤΕΛΟΣ_ΑΝ
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΓΡΑΨΕ NIK
ΓΙΑ i ΑΠΟ 1 ΜΕΧΡΙ NIK
ΓΡΑΨΕ A[i]
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΤΕΛΟΣ_ΠΡΟΓΡΑΜΜΑΤΟΣ
Αν Ν το πλήθος των αθλητών, ΝΙΚ το πλήθος των νικητών,
και Τ το πλήθος των επαναλήψεων της
ταξινόμησης με Τ=[(1+Ν)/2]*Ν (
για την ακρίβεια όπου Ν είναι Ν-1.... άθροισμα όρων αριθμητικής πρόόδου Σ=[(Α1+Αν)/2] *ν )
τότε το παραπάνω προγραμμα εκτελεί:
2*Ν + ΝΙΚ + Τ επαναλήψεις
------------------------------------------------------------------------------
Πετρίδης Λάζαρος, Γιαννιτσά
ΠΡΟΓΡΑΜΜΑ Δέκαθλο
ΜΕΤΑΒΛΗΤΕΣ
ΑΚΕΡΑΙΕΣ:i,Ν,Κ,Ω,Υ[128],Π[128],ΘΕΣΗ[128],Χ,ΤΕΜΠ
ΛΟΓΙΚΕΣ: shorted
ΑΡΧΗ
ΔΙΑΒΑΣΕ Ν
ΓΙΑ Κ ΑΠΟ 1 ΜΕΧΡΙ Ν
ΔΙΑΒΑΣΕ Υ[Κ],Π[Κ]
ΘΕΣΗ[Κ] <-- Κ
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
i <-- 2
shorted <-- ψευδής
ΟΣΟ (i<=Ν) ΚΑΙ (shorted=ψευδής) ΕΠΑΝΑΛΑΒΕ
shorted <-- αληθής
ΓΙΑ Ω ΑΠΟ Ν ΜΕΧΡΙ i ΜΕ ΒΗΜΑ -1
ΑΝ Υ[Ω-1]<Υ[Ω] ΤΟΤΕ
ΤΕΜΠ <-- Υ[Ω-1]
Υ[Ω-1] <-- Υ[Ω]
Υ[Ω] <-- ΤΕΜΠ
ΤΕΜΠ <-- Π[Ω-1]
Π[Ω-1] <-- Π[Ω]
Π[Ω] <-- ΤΕΜΠ
ΤΕΜΠ <-- ΘΕΣΗ[Ω-1]
ΘΕΣΗ[Ω-1] <-- ΘΕΣΗ[Ω]
ΘΕΣΗ[Ω] <-- ΤΕΜΠ
shorted <-- ψευδής
ΑΛΛΙΩΣ_ΑΝ (Υ[Ω-1]=Υ[Ω])ΚΑΙ (Π[Ω-1]>Π[Ω]) ΤΟΤΕ
ΤΕΜΠ <-- Π[Ω-1]
Π[Ω-1] <-- Π[Ω]
Π[Ω] <-- ΤΕΜΠ
ΤΕΜΠ <-- ΘΕΣΗ[Ω-1]
ΘΕΣΗ[Ω-1] <-- ΘΕΣΗ[Ω]
ΘΕΣΗ[Ω] <-- ΤΕΜΠ
shorted <-- ψευδής
ΤΕΛΟΣ_ΑΝ
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
i <-- i+1
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
Χ <-- 0
Κ <-- 1
ΟΣΟ (Υ[1]=Υ[Κ]) ΚΑΙ (Π[1]=Π[Κ]) ΕΠΑΝΑΛΑΒΕ
Χ <-- Χ+1
Κ <-- Κ+1
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΓΡΑΨΕ Χ
ΓΙΑ Κ ΑΠΟ 1 ΜΕΧΡΙ Χ
ΓΡΑΨΕ ΘΕΣΗ[Κ]
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΤΕΛΟΣ_ΠΡΟΓΡΑΜΜΑΤΟΣ
Αν Ν το πλήθος των αθλητών, Χ το πλήθος των νικητών,
και Τ' το πλήθος των επαναλήψεων μιας
γρήγορης ταξινόμησης με Τ' στατιστικά αρκετά μικρότερη του Τ =[(1+Ν)/2]*Ν
τότε το παραπάνω προγραμμα εκτελεί:
Ν + 2*Χ + Τ' επαναλήψεις
------------------------------------------------------------------------------
Σιταράς Φώτης, Γιαννιτσά
ΠΡΟΓΡΑΜΜΑ ΔΕΚΑΘΛΟΝ
ΣΤΑΘΕΡΕΣ
S=128
ΜΕΤΑΒΛΗΤΕΣ
ΑΚΕΡΑΙΕΣ: N,i,j,max,min,ΠΛ,Υ[S],Π[S],Μ[S]
ΑΡΧΗ
ΔΙΑΒΑΣΕ N
ΓΙΑ i ΑΠΟ 1 ΜΕΧΡΙ N
ΔΙΑΒΑΣΕ Υ[i],Π[i]
Μ[i] <-- 0
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
max <-- Υ[1]
ΓΙΑ i ΑΠΟ 2 ΜΕΧΡΙ N
ΑΝ Υ[i]>=max ΤΟΤΕ
max <-- Υ[i]
ΤΕΛΟΣ_ΑΝ
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
j <-- 0
ΓΙΑ i ΑΠΟ 1 ΜΕΧΡΙ N
ΑΝ Υ[i]=max ΤΟΤΕ
j <-- j+1
Μ[j] <-- i
ΤΕΛΟΣ_ΑΝ
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
min <-- Π[Μ[1]]
ΓΙΑ i ΑΠΟ 2 ΜΕΧΡΙ j
ΑΝ Π[Μ[i]]<min ΤΟΤΕ
min <-- Π[Μ[i]]
ΤΕΛΟΣ_ΑΝ
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΠΛ <-- 0
ΓΙΑ i ΑΠΟ 1 ΜΕΧΡΙ j
ΑΝ Π[Μ[i]]=min ΤΟΤΕ
ΠΛ <-- ΠΛ+1
ΤΕΛΟΣ_ΑΝ
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΓΡΑΨΕ ΠΛ
ΓΙΑ i ΑΠΟ 1 ΜΕΧΡΙ j
ΑΝ Π[Μ[i]]=min ΤΟΤΕ
ΓΡΑΨΕ Μ[i]
ΤΕΛΟΣ_ΑΝ
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΤΕΛΟΣ_ΠΡΟΓΡΑΜΜΑΤΟΣ ΔΕΚΑΘΛΟΝ
Αν Ν το πλήθος των αθλητών και ΠΛ το πλήθος των νικητών,
και j το πλήθος των "εν δυνάμει νικητών"
(με Ν>=j>=ΠΛ) τότε το παραπάνω προγραμμα εκτελεί:
2*Ν +2*j +ΠΛ επαναλήψεις
------------------------------------------------------------------------------
η δική μου ....
ΠΡΟΓΡΑΜΜΑ Δέκαθλο
ΣΤΑΘΕΡΕΣ
size=128
ΜΕΤΑΒΛΗΤΕΣ
ΑΚΕΡΑΙΕΣ: Υ[size],Π[size],Α_Α[size],i,j,temp,Ν,NIK
ΛΟΓΙΚΕΣ: shorted
ΑΡΧΗ
ΔΙΑΒΑΣΕ Ν
ΓΙΑ i ΑΠΟ 1 ΜΕΧΡΙ Ν
ΔΙΑΒΑΣΕ Υ[i], Π[i]
Α_Α[i] <-- i
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
i <-- 2
shorted <-- ψευδής
ΟΣΟ (i<=Ν) ΚΑΙ (ΟΧΙ shorted) ΕΠΑΝΑΛΑΒΕ
shorted <-- αληθής
ΓΙΑ j ΑΠΟ Ν ΜΕΧΡΙ i ΜΕ ΒΗΜΑ -1
ΑΝ (Υ[j-1]<Υ[j]) Ή ( (Υ[j-1]=Υ[j]) ΚΑΙ (Π[j-1]>Π[j]) ) ΤΟΤΕ
temp <-- Υ[j-1]
Υ[j-1] <-- Υ[j]
Υ[j] <-- temp
temp <-- Π[j-1]
Π[j-1] <-- Π[j]
Π[j] <-- temp
temp <-- Α_Α[j-1]
Α_Α[j-1] <-- Α_Α[j]
Α_Α[j] <-- temp
shorted <-- ψευδής
ΤΕΛΟΣ_ΑΝ
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
i <-- i+1
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
NIK <-- 1
i <-- 2
ΟΣΟ (Υ[1]=Υ[i]) ΚΑΙ (Π[1]=Π[i]) ΕΠΑΝΑΛΑΒΕ
i <-- i+1
NIK <-- NIK+1
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΓΡΑΨΕ 'πλήθος νικητών=',NIK, ' Νικητές είναι οι αθλητές με α/α:'
ΓΙΑ j ΑΠΟ 1 ΜΕΧΡΙ NIK
ΓΡΑΨΕ Α_Α[j]
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΤΕΛΟΣ_ΠΡΟΓΡΑΜΜΑΤΟΣ
Αν Ν το πλήθος των αθλητών, NIK,το πλήθος των νικητών,
και Τ' το πλήθος των επαναλήψεων μιας
γρήγορης ταξινόμησης τότε το παραπάνω προγραμμα εκτελεί:
Ν + 2*NIK + Τ' επαναλήψεις
------------------------------------------------------------------------------
...να και μια ενδιαφέρουσα και πολύ έξυπνη λύση ενός ακόμη μαθητή
ΠΡΟΓΡΑΜΜΑ ΔΕΚΑΘΛΟ
ΣΤΑΘΕΡΕΣ
Size=128
ΜΕΤΑΒΛΗΤΕΣ
ΑΚΕΡΑΙΕΣ: max_Y ,min_P,win,y[Size],p[Size],i,N
ΑΡΧΗ
max_Y <-- 0
min_P <-- 0
win <-- 0
ΔΙΑΒΑΣΕ N
ΓΙΑ i ΑΠΟ 1 ΜΕΧΡΙ N
ΔΙΑΒΑΣΕ y[i],p[i]
ΑΝ (y[i]>max_Y) Ή (y[i]=max_Y) ΚΑΙ (p[i]<min_P) ΤΟΤΕ
win <-- 1
max_Y <-- y[i]
min_P <-- p[i]
ΑΛΛΙΩΣ_ΑΝ (y[i]=max_Y) ΚΑΙ (p[i]=min_P) ΤΟΤΕ
win <-- win + 1
ΤΕΛΟΣ_ΑΝ
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΓΡΑΨΕ 'πλήθος νικητών=',win ,' Νικητές είναι οι αθλητές με α/α:'
ΓΙΑ i ΑΠΟ 1 ΜΕΧΡΙ N
ΑΝ (y[i]=max_Y ) ΚΑΙ (p[i]=min_P) ΤΟΤΕ
ΓΡΑΨΕ i
ΤΕΛΟΣ_ΑΝ
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΤΕΛΟΣ_ΠΡΟΓΡΑΜΜΑΤΟΣ
Αν Ν το πλήθος των αθλητών τότε το παραπάνω προγραμμα εκτελεί:
2*Ν επαναλήψεις !!!!!
![Wink :wink:](./images/smilies/icon_wink.gif)
[
με διαφορά το πιο γρήγορο χρησιμοποιώντας επίσης έναν μονοδιαστατο πίνακα λιγότερο!!!]
------------------------------------------------------------------------------
Τα συμπεράσματα για την ομορφιά του προγραμματισμού, την ταχύτητα εκτέλεσης ενός προγράμματος και τη βέλτιστη λύση ενός προβλήματος, δικά σας..........
------------------------------------------------------------------------------
Σε όλες τις προηγούμενες λύσεις δεν υπήρχαν έλεγχοι καταχώρησης, όπως και βοηθητικά μηνύματα για την εισαγωγή δεδομένων, καθώς για την εισαγωγή δεδομένων χρησιμοποίθηκε η "Αντληση Δεδομένων" από έτοιμα αρχεία κειμένου θεωρώντας τα δεδομένα πάντα έγκυρα.
Ενδεικτικά αρχεία δεδομένων:
ΕΙΣΟΔΟΣ 1
Παράθεση:
10
590 9
595 12
585 6
575 9
595 9
590 12
585 6
590 12
585 9
0 3
ΕΞΟΔΟΣ 1 Παράθεση:
πλήθος νικητών=1 Νικητές είναι οι αθλητές με α/α:
5
-------------------------------------------------------------------------------
ΕΙΣΟΔΟΣ 2Παράθεση:
8
570 9
0 3
585 6
575 9
575 9
585 6
570 12
585 9
ΕΞΟΔΟΣ 2 Παράθεση:
πλήθος νικητών=2 Νικητές είναι οι αθλητές με α/α:
3
6
-------------------------------------------------------------------------------