Εύρεση πλήθους άγνωστων στοιχείων

Ξεκίνησε από v.ale.s, 04 Απρ 2024, 09:43:42 ΠΜ

« προηγούμενο - επόμενο »

v.ale.s

Συνάδελφοι, θα ήθελα τις ιδέες σας.
Έχω πίνακα Ν θέσεων ταξινομημένο με τυχαία ονόματα αλλά κάποια ίδια.
Ποιος είναι ο καλύτερος τρόπος να βρω το πλήθος των διαφορετικών ονομάτων και το πλήθος από το καθένα;
π.χ. Έχω 2 ονόματα. Η Αθηνά εμφανίζεται 8 φορές, ο Γιώργος εμφανίζεται 17 φορές κτλ.
Ευχαριστώ προκαταβολικά.

alkisg

Δεδομένα:
Π: ['Αθηνά', 'Αθηνά', 'Γιώργος', 'Γιώργος', 'Γιώργος', 'Γιώργος', 'Παναγιώτης'], Ν: 7

Αποτελέσματα:
Ο: ['Αθηνά', 'Γιώργος', 'Παναγιώτης', '', '', '', ''], Ε: [2, 4, 1, 0, 0, 0, 0], Μ: 3

Δηλαδή θα διατρέξεις τον πίνακα μόνο μία φορά.
Κάθε φορά που βρίσκεις διαφορετικό όνομα, θα αυξάνεις τον μετρητή Μ.
Θα προσθέτεις το όνομα που βρήκες σε έναν νέο πίνακα Ο (Ονόματα).
Και παράλληλα θα αυξάνεις τους μετρητές εμφανίσεων, που θα τους κρατάς σε νέο πίνακα Ε.

Άρα στο παραπάνω παράδειγμα βρέθηκαν Μ=3 διαφορετικά ονόματα, που βρίσκονται στον πίνακα Ο, με τις αντίστοιχες εμφανίσεις τους στον πίνακα Ε.

Με τη συγκεκριμένη εκφώνηση το πρόβλημα μπορεί να λυθεί και χωρίς πίνακες Ο και Ε (κατευθείαν ΓΡΑΨΕ με το που τα υπολογίζεις), αλλά είναι πιο παραστατικό και επαναχρησιμοποιήσιμο με τους πίνακες Ο και Ε.

Καραμαούνας Πολύκαρπος

Μία εναλλακτική λύση χωρίς ταξινόμηση του αρχικού πίνακα:


NIKOS_KALYVAS

ΠΡΟΓΡΑΜΜΑ ΜΟΝΑΔΙΚΑ
ΜΕΤΑΒΛΗΤΕΣ
  ΑΚΕΡΑΙΕΣ:i,k,Π[10]
  ΧΑΡΑΚΤΗΡΕΣ:ΟΝ[10],Ξ[10]
ΑΡΧΗ
  ΟΝ[1] <-- 'ΑΝΤΩΝΗΣ'
  ΟΝ[2] <-- 'ΑΝΤΩΝΗΣ'
  ΟΝ[3] <-- 'ΑΝΤΩΝΗΣ'
  ΟΝ[4] <-- 'ΓΙΩΡΓΟΣ'
  ΟΝ[5] <-- 'ΓΙΩΡΓΟΣ'
  ΟΝ[6] <-- 'ΚΩΣΤΑΣ'
  ΟΝ[7] <-- 'ΜΑΝΩΛΗΣ'
  ΟΝ[8] <-- 'ΜΑΝΩΛΗΣ'
  ΟΝ[9] <-- 'ΝΙΚΟΣ'
  ΟΝ[10] <-- 'ΝΙΚΟΣ'
  k <-- 1
  Ξ[1] <-- ΟΝ[1]
  Π[1] <-- 1
  ΓΙΑ i ΑΠΟ 2 ΜΕΧΡΙ 10
    ΑΝ ΟΝ [ i ] = ΟΝ [ i - 1 ] ΤΟΤΕ
      Π [ k ] <-- Π [ k ]+1
    ΑΛΛΙΩΣ
      k <-- k+1
      Ξ [ k ] <-- ΟΝ [ i ]
      Π [ k ] <-- 1
    ΤΕΛΟΣ_ΑΝ
  ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
  ΓΙΑ i ΑΠΟ 1 ΜΕΧΡΙ k
    ΓΡΑΨΕ Ξ [ i ] , Π [ i ]
  ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΤΕΛΟΣ_ΠΡΟΓΡΑΜΜΑΤΟΣ

ΜΟΝΑΔΙΚΑ-ΔΙΑΧΩΡΙΣΜΟΣ.psc
ΝΙΚΟΣ ΚΑΛΥΒΑΣ
Καθηγητής Πληροφορικής (ΠΕ86)

v.ale.s