📝 Εκφώνηση Άσκησης
🎯 Σκοπός
Ο φοιτητής θα φτιάξει δύο προγράμματα που δουλεύουν με αρχεία JSON:
- Μέρος Α: Πρόγραμμα που δημιουργεί ένα JSON αρχείο με στοιχεία φοιτητών
- Μέρος Β: Πρόγραμμα που συμπιέζει (minify) το JSON αρχείο σε μία γραμμή
📌 Πρόγραμμα Εγγραφής — write_json.c
Γράψτε πρόγραμμα που:
- Ζητάει από τον χρήστη να εισάγει στοιχεία για 3 φοιτητές:
- Όνομα (string)
- Ηλικία (int)
- Βαθμός (float)
- Δημιουργεί αρχείο students.json με την παρακάτω μορφή:
{
"students": [
{
"name": "Giorgos",
"age": 20,
"grade": 8.5
},
{
"name": "Maria",
"age": 21,
"grade": 9.2
},
{
"name": "Nikos",
"age": 19,
"grade": 7.8
}
]
}
📝 Παρατηρήσεις
- Προσοχή στα κόμματα: μετά από κάθε φοιτητή εκτός από τον τελευταίο
- Προσοχή στη στοίχιση (indentation) με κενά
- Τα strings σε JSON μπαίνουν σε διπλά εισαγωγικά "..."
📌 Πρόγραμμα Συμπίεσης — minify.c
Στο πραγματικό διαδίκτυο, τα JSON αρχεία στέλνονται συνήθως σε συμπιεσμένη μορφή (minified) — χωρίς κενά, tabs ή αλλαγές γραμμής. Αυτό εξοικονομεί χώρο και ταχύτητα στο δίκτυο.
Η δουλειά σου: γράψε πρόγραμμα που παίρνει το students.json (από το Μέρος Α) και το μετατρέπει σε minified.json.
📥 Είσοδος (αρχείο students.json)
{
"students": [
{
"name": "Giorgos",
"age": 20,
"grade": 8.5
},
{
"name": "Maria",
"age": 21,
"grade": 9.2
},
{
"name": "Nikos",
"age": 19,
"grade": 7.8
}
]
}
📤 Έξοδος (αρχείο minified.json)
{"students":[{"name":"Giorgos","age":20,"grade":8.5},{"name":"Maria","age":21,"grade":9.2},{"name":"Nikos","age":19,"grade":7.8}]}
📋 Τι πρέπει να κάνει το πρόγραμμα
- Ανοίγει το students.json για ανάγνωση
- Ανοίγει το minified.json για εγγραφή
- Διαβάζει χαρακτήρα-χαρακτήρα με fgetc
- Γράφει μόνο τους χαρακτήρες που είναι χρήσιμοι με fputc
🔑 Κανόνες Συμπίεσης
| Όταν βρεις... | Κάνε αυτό |
|---|---|
| Κενό ' ' | ΠΑΡΑΛΕΙΨΕ τον (εκτός αν είσαι μέσα σε string) |
| Tab '\t' | ΠΑΡΑΛΕΙΨΕ τον |
| Νέα γραμμή '\n' | ΠΑΡΑΛΕΙΨΕ τη |
| Οποιοσδήποτε άλλος χαρακτήρας | Γράψτον στο αρχείο |
⚠️ Προσοχή με τα strings!
Αν ο χαρακτήρας είναι μέσα σε εισαγωγικά (π.χ. "Γιώργος Παπαδόπουλος"), τα κενά πρέπει να διατηρηθούν!
💡 Υπόδειξη: Χρησιμοποίησε μια μεταβλητή int inside_string = 0; που γίνεται 1 όταν βλέπεις " και γίνεται ξανά 0 όταν βλέπεις το επόμενο ".
🎯 Σκελετός Προγράμματος
🔗 Σύνδεση με το Μέρος Α
📁 Ροή αρχείων:
students.json (Μέρος Α) → minified.json (Μέρος Β)
✅ Κριτήρια Αξιολόγησης
| Κριτήριο | Βαθμοί |
|---|---|
| Σωστό άνοιγμα/κλείσιμο αρχείων με έλεγχο NULL | 20% |
| Μέρος Α — Σωστή δημιουργία JSON (εισαγωγικά, κόμματα, αγκύλες, στοίχιση) | 35% |
| Μέρος Β — Σωστή συμπίεση (minify) με διατήρηση των strings | 30% |
| Καθαρός κώδικας με σχόλια | 15% |