ΤΕΥΧΟΣ ΜΑΪΟΥ · ΠΑΓΚΥΠΡΙΕΣ 2026
Σπασίκλας
η βαρετή σελίδα για σπουδές, πάντα δωρεάν.
ΠΑΓΚΥΠΡΙΕΣ ΣΕ
ΜΕΡ
ΩΡ
ΛΕΠ
ΔΕΥ
δες το πλήρες πρόγραμμα →
🧪 ΔΟΚΙΜΑΣΤΙΚΟ ΣΠΑΣΙΚΛΑ · ΠΑΓΚΥΠΡΙΕΣ 2026

Πληροφορική

Κωδικός μαθήματος 015 · Δοκιμαστικό δοκίμιο εξάσκησης για τις Παγκύπριες Εξετάσεις 2026.

⚠️
AI Generated. Αυτό το δοκίμιο δημιουργήθηκε από τεχνητή νοημοσύνη με βάση τον επίσημο Πίνακα Προδιαγραφών 2026 και τα παρελθόντα θέματα Παγκυπρίων. Μπορεί να περιέχει λάθη. Δεν είναι επίσημο δοκίμιο — χρησιμοποίησέ το ως βοηθητικό υλικό εξάσκησης και έλεγξε τις απαντήσεις με τον/την καθηγητή/τριά σου.
Οι λύσεις θα είναι διαθέσιμες αύριο στις 6 το απόγευμα. Δούλεψε το δοκίμιο πρώτα μόνος σου — δώσε χρόνο στον εγκέφαλό σου να σκεφτεί. Το reflection time είναι το μισό μάθημα. Άνοιξε το δοκίμιο — οι λύσεις βγαίνουν αύριο στις 6 μ.μ.

ΥΠΟΥΡΓΕΙΟ ΠΑΙΔΕΙΑΣ, ΑΘΛΗΤΙΣΜΟΥ ΚΑΙ ΝΕΟΛΑΙΑΣ

⚠️ ΣΗΜΑΝΤΙΚΗ ΣΗΜΕΙΩΣΗ — AI Generated

Αυτό το δοκιμαστικό δοκίμιο δημιουργήθηκε από τεχνητή νοημοσύνη (AI) του Σπασίκλα, με βάση τον επίσημο Πίνακα Προδιαγραφών 2026 του Υπουργείου Παιδείας και τα παρελθόντα θέματα Παγκυπρίων Εξετάσεων. Παρότι έγινε προσπάθεια για ακρίβεια, μπορεί να περιέχει λάθη ή ανακρίβειες. Δεν είναι επίσημο δοκίμιο. Χρησιμοποιήστε το ως βοηθητικό υλικό εξάσκησης, όχι ως μοναδική πηγή προετοιμασίας.

Έλεγξε τις απαντήσεις με τον/την καθηγητή/τριά σου ή με τα επίσημα παλαιότερα θέματα.


ΥΠΗΡΕΣΙΑ ΕΞΕΤΑΣΕΩΝ

ΠΑΓΚΥΠΡΙΕΣ ΓΡΑΠΤΕΣ ΕΞΕΤΑΣΕΙΣ 2026 — ΔΟΚΙΜΑΣΤΙΚΟ ΔΟΚΙΜΙΟ (Σπασίκλας)

Μάθημα: ΠΛΗΡΟΦΟΡΙΚΗ ΚΑΙ ΕΠΙΣΤΗΜΗ ΗΛΕΚΤΡΟΝΙΚΩΝ ΥΠΟΛΟΓΙΣΤΩΝ Κωδικός: 015 Διάρκεια: 3 ώρες Ημερομηνία: Δοκιμαστικό Σύνολο μονάδων: 100


Οδηγίες

  1. Να ελέγξετε τη σελιδοποίηση του δοκιμίου σας πριν αρχίσετε.
  2. Το δοκίμιο αποτελείται από τέσσερα μέρη (Α’, Β’, Γ’, Δ’) και δεκαπέντε (15) συνολικά ερωτήσεις.
  3. Όλα τα προγράμματα και τα τμήματα προγραμμάτων να γραφούν σε γλώσσα C++.
  4. Σε όλες τις ασκήσεις προγραμματισμού δεν χρειάζεται έλεγχος εγκυρότητας τιμών εκτός αν αναφέρεται ρητά.
  5. Δεν επιτρέπεται η χρήση διορθωτικού υγρού.
  6. Επιτρέπεται η χρήση μη προγραμματιζόμενης αριθμομηχανής.
  7. Η αρίθμηση των μονάδων δηλώνεται μέσα σε αγκύλες δεξιά κάθε ερώτησης.

ΜΕΡΟΣ Α’ — Σύνολο μονάδων: 25

Άσκηση 1 [5 μονάδες] — Δυαδικοί Αριθμοί

(α) Να μετατρέψετε τον δεκαδικό αριθμό 45 στο δυαδικό σύστημα. [1]

(β) Να μετατρέψετε τον δυαδικό αριθμό 101101 στο δεκαδικό σύστημα. [1]

(γ) Να μετατρέψετε τον δεκαδικό αριθμό 12.625 στο δυαδικό σύστημα. [2]

(δ) Να εκτελέσετε την πρόσθεση των δυαδικών αριθμών 1011 + 1101 στο δυαδικό σύστημα και να δώσετε το αποτέλεσμα. [1]


Άσκηση 2 [6 μονάδες] — Αρχιτεκτονική Υπολογιστών

(α) Να αναφέρετε τρεις (3) καταχωρητές της Κεντρικής Μονάδας Επεξεργασίας (CPU) και να εξηγήσετε σύντομα τον σκοπό του καθενός. [3]

(β) Στον κύκλο εκτέλεσης μιας εντολής (Fetch–Decode–Execute) να εξηγήσετε τι ακριβώς συμβαίνει στο στάδιο Fetch και ποιοι καταχωρητές εμπλέκονται. [2]

(γ) Να εξηγήσετε τη διαφορά μεταξύ μνήμης RAM και μνήμης ROM (ένα χαρακτηριστικό για κάθε μία). [1]


Άσκηση 3 [6 μονάδες] — Έννοιες C++ / Τελεστές

Δίνεται το παρακάτω τμήμα προγράμματος σε C++:

int a = 7, b = 3;
double c;
c = a / b;
cout << c << endl;
c = (double) a / b;
cout << c << endl;
cout << (a % b) * 2 << endl;
cout << (a > b && b > 0) << endl;

(α) Να γράψετε τι ακριβώς θα εμφανίσει το πιο πάνω τμήμα προγράμματος (μία γραμμή ανά εντολή cout). [4]

(β) Να εξηγήσετε γιατί η πρώτη εμφάνιση δίνει διαφορετική τιμή από τη δεύτερη. [2]


Άσκηση 4 [4 μονάδες] — Δομές Διακλάδωσης

Δίνεται ο παρακάτω κώδικας:

int x;
cin >> x;
if (x % 2 == 0)
 if (x > 10)
 cout << "A";
 else
 cout << "B";
else
 cout << "C";

Να συμπληρώσετε τον παρακάτω πίνακα, γράφοντας τι θα εμφανίσει το πρόγραμμα για κάθε τιμή εισόδου: [4]

xΈξοδος
4
12
7
0

Άσκηση 5 [4 μονάδες] — Δομές Επανάληψης

Δίνεται ο παρακάτω βρόχος:

int s = 0;
for (int i = 1; i <= 10; i++) {
 if (i % 3 == 0) continue;
 if (i > 8) break;
 s += i;
}
cout << s;

(α) Να εξηγήσετε σύντομα τι κάνουν οι εντολές continue και break. [2]

(β) Να καταγράψετε την τιμή της μεταβλητής s που θα εμφανιστεί. [2]


ΜΕΡΟΣ Β’ — Σύνολο μονάδων: 25

Άσκηση 6 [8 μονάδες] — Συμβολοσειρές (Strings)

Να γράψετε πρόγραμμα σε C++ το οποίο:

  1. Διαβάζει από τον χρήστη μία λέξη (συμβολοσειρά χωρίς κενά), μέγιστου μήκους 50 χαρακτήρες.
  2. Εμφανίζει το μήκος της λέξης.
  3. Εμφανίζει τη λέξη με όλα τα γράμματα κεφαλαία.
  4. Μετράει και εμφανίζει πόσα φωνήεντα (A, E, I, O, U — κεφαλαία ή πεζά) περιέχει η λέξη.

Παράδειγμα εκτέλεσης:

Δώσε λέξη: Programming
Μήκος: 11
Κεφαλαία: PROGRAMMING
Φωνήεντα: 3

Άσκηση 7 [9 μονάδες] — Μονοδιάστατοι Πίνακες

Δίνεται μονοδιάστατος πίνακας ακεραίων A με μέγεθος 20 θέσεις, ο οποίος είναι ήδη γεμάτος με τιμές.

Να γράψετε τμήμα προγράμματος σε C++ το οποίο:

(α) Υπολογίζει και εμφανίζει τον μέσο όρο των στοιχείων του πίνακα. [3]

(β) Βρίσκει και εμφανίζει τη μεγαλύτερη τιμή του πίνακα καθώς και τη θέση στην οποία βρίσκεται (αν εμφανίζεται περισσότερες από μία φορές, αρκεί η πρώτη). [3]

(γ) Μετράει και εμφανίζει πόσα στοιχεία του πίνακα είναι πάνω από τον μέσο όρο που υπολογίστηκε στο (α). [3]


Άσκηση 8 [8 μονάδες] — Δομές Επανάληψης + Λογική

Να γράψετε πρόγραμμα σε C++ το οποίο διαβάζει επαναληπτικά ακεραίους από τον χρήστη μέχρι αυτός να δώσει την τιμή 0 (η τιμή 0 δεν συμμετέχει στους υπολογισμούς). Στο τέλος να εμφανίζει:

(α) Το πλήθος των αριθμών που δόθηκαν. (β) Το άθροισμα των θετικών αριθμών. (γ) Το πλήθος των αρνητικών αριθμών. (δ) Τον μέγιστο από όλους τους αριθμούς που δόθηκαν.

Αν ο χρήστης δώσει 0 ως πρώτο νούμερο, να εμφανίζεται το μήνυμα "Δεν δόθηκαν αριθμοί" και να τερματίζεται το πρόγραμμα.


ΜΕΡΟΣ Γ’ — Σύνολο μονάδων: 25

Άσκηση 9 [9 μονάδες] — Συναρτήσεις (Functions)

(α) Να γράψετε συνάρτηση int psifia(int n) που δέχεται ως όρισμα έναν θετικό ακέραιο n και επιστρέφει το πλήθος των ψηφίων του. Π.χ. psifia(7042) → 4. [4]

(β) Να γράψετε συνάρτηση bool einaiPrwtos(int n) που επιστρέφει true αν ο n είναι πρώτος αριθμός, αλλιώς false. [3]

(γ) Να γράψετε πρόγραμμα (συμπεριλαμβανομένης της main) που διαβάζει έναν ακέραιο n και, κάνοντας χρήση των πιο πάνω συναρτήσεων, εμφανίζει το μήνυμα "NAI" αν ο n είναι πρώτος και έχει ακριβώς 2 ψηφία, αλλιώς "OXI". [2]


Άσκηση 10 [8 μονάδες] — Αλγόριθμοι Αναζήτησης

Δίνεται ταξινομημένος αύξουσα πίνακας ακεραίων B με μέγεθος N.

(α) Να γράψετε συνάρτηση int duadiki(int B[], int N, int key) που υλοποιεί δυαδική αναζήτηση. Η συνάρτηση να επιστρέφει τη θέση του key στον πίνακα αν τον βρει, αλλιώς να επιστρέφει -1. [6]

(β) Να εξηγήσετε σύντομα γιατί η δυαδική αναζήτηση απαιτεί ταξινομημένο πίνακα. [1]

(γ) Για πίνακα 1.000.000 στοιχείων, ποιο είναι το μέγιστο πλήθος συγκρίσεων που θα κάνει η δυαδική αναζήτηση; (Δικαιολογήστε την απάντησή σας μονολεκτικά.) [1]


Άσκηση 11 [8 μονάδες] — Αλγόριθμοι Ταξινόμησης (Bubble Sort)

Δίνεται ο παρακάτω πίνακας C με 6 στοιχεία:

C = [ 8 , 3 , 5 , 1 , 9 , 4 ]

(α) Να καταγράψετε την κατάσταση του πίνακα μετά από κάθε πέρασμα του αλγόριθμου Bubble Sort (αύξουσα ταξινόμηση). [5]

(β) Να γράψετε συνάρτηση void bubble(int C[], int N) σε C++ που ταξινομεί τον πίνακα αύξουσα με τον αλγόριθμο Bubble Sort. [3]


ΜΕΡΟΣ Δ’ — Σύνολο μονάδων: 25

Άσκηση 12 [6 μονάδες] — Δισδιάστατοι Πίνακες (2D Arrays)

Δίνεται δισδιάστατος πίνακας ακεραίων M[4][5] (4 γραμμές × 5 στήλες) με τιμές ήδη γεμάτες.

Να γράψετε τμήμα προγράμματος σε C++ που:

(α) Υπολογίζει και εμφανίζει το άθροισμα κάθε γραμμής. [3]

(β) Βρίσκει και εμφανίζει τη στήλη που έχει το μεγαλύτερο συνολικό άθροισμα. [3]


Άσκηση 13 [4 μονάδες] — Αρχεία (Files)

Στο αρχείο κειμένου numbers.txt υπάρχουν ακέραιοι αριθμοί, ένας σε κάθε γραμμή, σε άγνωστο πλήθος. Να γράψετε τμήμα προγράμματος σε C++ το οποίο διαβάζει όλους τους αριθμούς από το αρχείο και εμφανίζει το άθροισμά τους.


Άσκηση 14 [15 μονάδες] — Σύνθετο Πρόβλημα (Structures + Arrays + Functions + Files)

Ένας σύλλογος συμμετέχει σε αγώνες στίβου με 40 αθλητές. Για κάθε αθλητή φυλάγονται οι πληροφορίες:

struct Athlete {
 int id; // κωδικός
 string name; // ονοματεπώνυμο
 int age; // ηλικία
 double bestTime; // καλύτερος χρόνος σε δευτερόλεπτα
};

Στο αρχείο κειμένου athletes.txt υπάρχουν τα στοιχεία όλων των 40 αθλητών, ένας ανά γραμμή, με τη μορφή:

id name age bestTime

(π.χ. 7 Andreou 18 11.42)

Να γράψετε ολοκληρωμένο πρόγραμμα σε C++ που:

(α) Δηλώνει πίνακα Athlete A[40] και διαβάζει τα στοιχεία όλων των αθλητών από το αρχείο. [3]

(β) Εμφανίζει πόσοι αθλητές είναι κάτω των 18 ετών. [2]

(γ) Εμφανίζει το όνομα και τον χρόνο του αθλητή με τον καλύτερο (μικρότερο) bestTime. [4]

(δ) Ταξινομεί τον πίνακα A σε αύξουσα σειρά κατά bestTime χρησιμοποιώντας Selection Sort και αποθηκεύει τα ταξινομημένα δεδομένα σε αρχείο ranking.txt με μορφή:

Θέση id Ονοματεπώνυμο Χρόνος

[6]


─────────────────────────────────────────

ΑΠΑΝΤΗΣΕΙΣ — ΛΥΣΕΙΣ ΕΝΔΕΙΚΤΙΚΕΣ

─────────────────────────────────────────

ΜΕΡΟΣ Α’

Άσκηση 1 — Δυαδικοί Αριθμοί

(α) 45₁₀ = 101101₂ Επαλήθευση: 32 + 8 + 4 + 1 = 45. ✓

(β) 101101₂ = 32 + 8 + 4 + 1 = 45₁₀

(γ) 12.625₁₀:

  • Ακέραιο μέρος: 12 = 1100₂
  • Δεκαδικό μέρος: 0.625 × 2 = 1.25 → 1, 0.25 × 2 = 0.5 → 0, 0.5 × 2 = 1.0 → 1 → .101
  • Αποτέλεσμα: 1100.101₂

(δ) 1011 + 1101:

 1 0 1 1
+ 1 1 0 1
─────────
1 1 0 0 0

Αποτέλεσμα: 11000₂ ( = 24₁₀, που είναι 11 + 13 ✓)


Άσκηση 2 — Αρχιτεκτονική

(α) Τρεις καταχωρητές (ενδεικτικά):

  • PC (Program Counter) — κρατά τη διεύθυνση της επόμενης εντολής που πρόκειται να εκτελεστεί.
  • IR (Instruction Register) — κρατά την τρέχουσα εντολή που εκτελείται.
  • MAR (Memory Address Register) — κρατά τη διεύθυνση μνήμης από/προς την οποία θα γίνει η μεταφορά δεδομένων.
  • MDR (Memory Data Register) — κρατά τα δεδομένα που μεταφέρονται από/προς τη μνήμη.
  • ACC (Accumulator) — κρατά ενδιάμεσα αποτελέσματα της ALU.

(β) Στο στάδιο Fetch: η CPU παίρνει τη διεύθυνση της επόμενης εντολής από τον PC, την τοποθετεί στον MAR, διαβάζει την εντολή από τη μνήμη μέσω του MDR, και την αποθηκεύει στον IR. Στη συνέχεια ο PC αυξάνεται κατά 1 (ή κατά το μήκος εντολής).

(γ) RAM: μνήμη ανάγνωσης/εγγραφής, πτητική (χάνει τα δεδομένα όταν χαθεί ρεύμα). ROM: μνήμη μόνο ανάγνωσης, μη πτητική (διατηρεί τα δεδομένα).


Άσκηση 3 — Τελεστές

(α) Έξοδος (γραμμή προς γραμμή):

2 // 7/3 ακέραια διαίρεση = 2, ανατίθεται σε double → 2 (ή 2.0)
2.33333 // (double)7 / 3 = 2.333... (η ακριβής εμφάνιση εξαρτάται από το setprecision)
2 // (7 % 3) * 2 = 1 * 2 = 2
1 // true → 1

Για το γραπτό δεκτές απαντήσεις: γραμμή 1: 2, γραμμή 2: 2.333332.333…), γραμμή 3: 2, γραμμή 4: 1.

(β) Στην πρώτη γραμμή ο τελεστής / μεταξύ δύο int εκτελεί ακέραια διαίρεση (7/3 = 2). Στη δεύτερη γραμμή το (double) a μετατρέπει τον τελεστή σε double, οπότε η / εκτελεί διαίρεση κινητής υποδιαστολής και επιστρέφει 2.333…


Άσκηση 4 — Διακλάδωση

Το else αντιστοιχεί στο εσωτερικό if (dangling-else rule):

xΈλεγχοςΈξοδος
4άρτιος, ≤10B
12άρτιος, >10A
7περιττόςC
0άρτιος, ≤10B

Άσκηση 5 — Βρόχοι

(α) continue: παρακάμπτει το υπόλοιπο του τρέχοντος περάσματος και προχωρά στην επόμενη επανάληψη. break: τερματίζει αμέσως τον βρόχο.

(β) Πίνακας τιμών:

ii%3==0 ?i>8 ?s
1όχιόχι1
2όχιόχι3
3NAI → continue3
4όχιόχι7
5όχιόχι12
6NAI → continue12
7όχιόχι19
8όχιόχι27
9NAI → continue27
1010>8 → break27

Έξοδος: 27


ΜΕΡΟΣ Β’

Άσκηση 6 — Strings

#include <iostream>
#include <string>
#include <cctype>
using namespace std;

int main() {
 string s;
 cout << "Δώσε λέξη: ";
 cin >> s;

 // (2) μήκος
 cout << "Μήκος: " << s.length() << endl;

 // (3) κεφαλαία
 string up = s;
 for (int i = 0; i < up.length(); i++)
 up[i] = toupper(up[i]);
 cout << "Κεφαλαία: " << up << endl;

 // (4) φωνήεντα
 int v = 0;
 for (int i = 0; i < up.length(); i++) {
 char c = up[i];
 if (c == 'A' || c == 'E' || c == 'I' || c == 'O' || c == 'U')
 v++;
 }
 cout << "Φωνήεντα: " << v << endl;

 return 0;
}

Επαλήθευση για “Programming”:

  • length = 11 ✓
  • up = “PROGRAMMING” ✓
  • Φωνήεντα: P-R-O-G-R-A-M-M-I-N-G → O, A, I = 3

Άσκηση 7 — 1D Arrays

const int N = 20;
int A[N];
// ... ο πίνακας θεωρείται ήδη γεμάτος ...

// (α) μέσος όρος
double sum = 0;
for (int i = 0; i < N; i++) sum += A[i];
double mo = sum / N;
cout << "Μέσος όρος: " << mo << endl;

// (β) μέγιστο + θέση
int maxV = A[0], pos = 0;
for (int i = 1; i < N; i++) {
 if (A[i] > maxV) {
 maxV = A[i];
 pos = i;
 }
}
cout << "Μέγιστο: " << maxV << " στη θέση " << pos << endl;

// (γ) πλήθος > μέσου όρου
int count = 0;
for (int i = 0; i < N; i++)
 if (A[i] > mo) count++;
cout << "Πάνω από μ.ο.: " << count << endl;

Άσκηση 8 — Επανάληψη με sentinel

#include <iostream>
#include <climits>
using namespace std;

int main() {
 int x;
 int plithos = 0, athroismaTh = 0, plithosAr = 0;
 int maxV = INT_MIN;

 cout << "Δώσε αριθμό (0 για τέλος): ";
 cin >> x;

 if (x == 0) {
 cout << "Δεν δόθηκαν αριθμοί" << endl;
 return 0;
 }

 while (x != 0) {
 plithos++;
 if (x > 0) athroismaTh += x;
 if (x < 0) plithosAr++;
 if (x > maxV) maxV = x;

 cout << "Δώσε αριθμό (0 για τέλος): ";
 cin >> x;
 }

 cout << "Πλήθος: " << plithos << endl;
 cout << "Άθροισμα θετικών: " << athroismaTh << endl;
 cout << "Πλήθος αρνητικών: " << plithosAr << endl;
 cout << "Μέγιστος: " << maxV << endl;
 return 0;
}

ΜΕΡΟΣ Γ’

Άσκηση 9 — Συναρτήσεις

#include <iostream>
using namespace std;

int psifia(int n) {
 int count = 0;
 if (n == 0) return 1; // αν θέλουμε να καλύψουμε και το 0
 while (n > 0) {
 n /= 10;
 count++;
 }
 return count;
}

bool einaiPrwtos(int n) {
 if (n < 2) return false;
 for (int i = 2; i * i <= n; i++)
 if (n % i == 0) return false;
 return true;
}

int main() {
 int n;
 cout << "Δώσε ακέραιο: ";
 cin >> n;

 if (einaiPrwtos(n) && psifia(n) == 2)
 cout << "NAI";
 else
 cout << "OXI";
 return 0;
}

Επαληθεύσεις:

  • psifia(7042): 7042→704→70→7→0, count = 4 ✓
  • einaiPrwtos(7042): 7042 άρτιος, διαιρετός με 2 → false
  • einaiPrwtos(13): i=2 (4≤13, 13%2≠0), i=3 (9≤13, 13%3≠0), i=4 (16>13) → true ✓
  • Είσοδος 13 → πρώτος + 2 ψηφία → NAI
  • Είσοδος 17 → πρώτος + 2 ψηφία → NAI
  • Είσοδος 7 → πρώτος αλλά 1 ψηφίο → OXI
  • Είσοδος 121 → 3 ψηφία → OXI

Άσκηση 10 — Δυαδική Αναζήτηση

(α)

int duadiki(int B[], int N, int key) {
 int low = 0, high = N - 1;
 while (low <= high) {
 int mid = (low + high) / 2;
 if (B[mid] == key)
 return mid;
 else if (B[mid] < key)
 low = mid + 1;
 else
 high = mid - 1;
 }
 return -1;
}

(β) Η δυαδική αναζήτηση βασίζεται στο ότι, συγκρίνοντας με το μεσαίο στοιχείο, ξέρουμε σε ποιο μισό του πίνακα μπορεί να βρίσκεται το ζητούμενο. Σε μη ταξινομημένο πίνακα αυτή η απόφαση δεν είναι δυνατή.

(γ) Για N = 1.000.000, το μέγιστο πλήθος συγκρίσεων είναι ⌈log₂(1.000.000)⌉ = 20 (αφού 2²⁰ = 1.048.576 > 10⁶).


Άσκηση 11 — Bubble Sort

(α) Αύξουσα ταξινόμηση του [8, 3, 5, 1, 9, 4]:

Πέρασμα 1 (το μέγιστο μετακινείται στο τέλος):

ΣύγκρισηΠίνακας
αρχικός8 3 5 1 9 4
8↔3 swap3 8 5 1 9 4
8↔5 swap3 5 8 1 9 4
8↔1 swap3 5 1 8 9 4
8↔9 noop3 5 1 8 9 4
9↔4 swap3 5 1 8 4 9

Μετά το πέρασμα 1: 3 5 1 8 4 9

Πέρασμα 2 (πάνω σε 3 5 1 8 4 9, αγνοούμε την τελευταία θέση που έχει το 9): 3↔5 noop · 5↔1 swap → 3 1 5 8 4 9 · 5↔8 noop · 8↔4 swap → 3 1 5 4 8 9 Μετά το πέρασμα 2: 3 1 5 4 8 9

Πέρασμα 3 (πάνω σε 3 1 5 4 8 9, αγνοούμε τις 2 τελευταίες): 3↔1 swap → 1 3 5 4 8 9 · 3↔5 noop · 5↔4 swap → 1 3 4 5 8 9 Μετά το πέρασμα 3: 1 3 4 5 8 9

Μετά το πέρασμα 4: 1 3 4 5 8 9 (χωρίς ανταλλαγές → ταξινομημένος)

(β)

void bubble(int C[], int N) {
 for (int i = 0; i < N - 1; i++) {
 bool swapped = false;
 for (int j = 0; j < N - 1 - i; j++) {
 if (C[j] > C[j+1]) {
 int t = C[j];
 C[j] = C[j+1];
 C[j+1] = t;
 swapped = true;
 }
 }
 if (!swapped) break; // early termination αν είναι ήδη ταξινομημένος
 }
}

ΜΕΡΟΣ Δ’

Άσκηση 12 — 2D Array

const int R = 4, C = 5;
int M[R][C];
// ... θεωρείται γεμάτος ...

// (α) άθροισμα κάθε γραμμής
for (int i = 0; i < R; i++) {
 int rowSum = 0;
 for (int j = 0; j < C; j++) rowSum += M[i][j];
 cout << "Γραμμή " << i << ": " << rowSum << endl;
}

// (β) στήλη με το μεγαλύτερο άθροισμα
int bestCol = 0, bestSum = 0;
for (int i = 0; i < R; i++) bestSum += M[i][0]; // άθροισμα στήλης 0

for (int j = 1; j < C; j++) {
 int cs = 0;
 for (int i = 0; i < R; i++) cs += M[i][j];
 if (cs > bestSum) {
 bestSum = cs;
 bestCol = j;
 }
}
cout << "Μέγιστη στήλη: " << bestCol << " με άθροισμα " << bestSum << endl;

Άσκηση 13 — Αρχεία

#include <fstream>
#include <iostream>
using namespace std;

int main() {
 ifstream fin("numbers.txt");
 int x, sum = 0;
 while (fin >> x) sum += x;
 fin.close();
 cout << "Άθροισμα: " << sum << endl;
 return 0;
}

Άσκηση 14 — Σύνθετο: Structures + Files + Sort

#include <iostream>
#include <fstream>
#include <string>
#include <iomanip>
using namespace std;

struct Athlete {
 int id;
 string name;
 int age;
 double bestTime;
};

const int N = 40;

int main() {
 Athlete A[N];

 // (α) ανάγνωση από αρχείο
 ifstream fin("athletes.txt");
 for (int i = 0; i < N; i++)
 fin >> A[i].id >> A[i].name >> A[i].age >> A[i].bestTime;
 fin.close();

 // (β) πόσοι κάτω των 18
 int under18 = 0;
 for (int i = 0; i < N; i++)
 if (A[i].age < 18) under18++;
 cout << "Κάτω των 18: " << under18 << endl;

 // (γ) αθλητής με τον μικρότερο bestTime
 int bestIdx = 0;
 for (int i = 1; i < N; i++)
 if (A[i].bestTime < A[bestIdx].bestTime) bestIdx = i;
 cout << "Καλύτερος: " << A[bestIdx].name
 << " (" << A[bestIdx].bestTime << " sec)" << endl;

 // (δ) Selection Sort βάσει bestTime
 for (int i = 0; i < N - 1; i++) {
 int minIdx = i;
 for (int j = i + 1; j < N; j++)
 if (A[j].bestTime < A[minIdx].bestTime) minIdx = j;
 if (minIdx != i) {
 Athlete tmp = A[i];
 A[i] = A[minIdx];
 A[minIdx] = tmp;
 }
 }

 // αποθήκευση στο ranking.txt
 ofstream fout("ranking.txt");
 fout << "ΘέσηtidtΟνοματεπώνυμοtΧρόνος" << endl;
 for (int i = 0; i < N; i++)
 fout << (i + 1) << "t" << A[i].id << "t"
 << A[i].name << "t"
 << fixed << setprecision(2) << A[i].bestTime << endl;
 fout.close();

 return 0;
}

ΠΙΝΑΚΑΣ ΜΟΝΑΔΩΝ

ΜέροςΆσκησηΜονάδες
Α’1 — Δυαδικοί5
Α’2 — Αρχιτεκτονική6
Α’3 — Τελεστές C++6
Α’4 — Διακλάδωση4
Α’5 — Βρόχοι (break/continue)4
Σύνολο Α’25
Β’6 — Strings8
Β’7 — 1D Array9
Β’8 — Βρόχος με sentinel8
Σύνολο Β’25
Γ’9 — Συναρτήσεις9
Γ’10 — Δυαδική Αναζήτηση8
Γ’11 — Bubble Sort8
Σύνολο Γ’25
Δ’12 — 2D Array6
Δ’13 — Αρχεία4
Δ’14 — Σύνθετο15
Σύνολο Δ’25
ΓΕΝΙΚΟ ΣΥΝΟΛΟ100

Δοκιμαστικό δοκίμιο — Σπασίκλας. Δεν είναι επίσημο έγγραφο της Υπηρεσίας Εξετάσεων του Υπουργείου Παιδείας.