Περιγραφή Μαθήματος
 
                                                                                                                                                            - Το μάθημα δεν διαθέτει περιγραφή -
Αλγόριθμοι και Προγραμματισμός στη C
Διαδραστικό Φύλλο Εργασίας
Τι είναι Αλγόριθμος
Αλγόριθμος είναι:
- Μια πεπερασμένη σειρά ενεργειών,
- Αυστηρά καθορισμένων και
- Εκτελέσιμων σε πεπερασμένο χρόνο, που
- Στοχεύουν στην επίλυση ενός προβλήματος.
Κριτήρια Αλγορίθμου
| Κριτήριο | Περιγραφή | Παράδειγμα σε C | 
|---|---|---|
| Είσοδος | Κατά την εκκίνηση καμία, μία ή περισσότερες τιμές δεδομένων πρέπει να δίνονται ως είσοδοι | scanf("%d", &number); | 
| Έξοδος | Στο τέλος πρέπει να εξάγει κάποιο αποτέλεσμα μετά την επεξεργασία των δεδομένων | printf("Αποτέλεσμα: %d", result); | 
| Καθοριστικότητα | Κάθε εντολή δεν πρέπει να αφήνει περιθώρια ασάφειας ή παρερμηνείας | result = (a + b) * c; // Σαφής πράξη | 
| Περατότητα | Κάθε εκτέλεση τελειώνει ύστερα από πεπερασμένο αριθμό βημάτων | for(int i=0; i<10; i++) { ... } // Πεπερασμένος βρόχος | 
| Αποτελεσματικότητα | Όλες οι διαδικασίες μπορούν να πραγματοποιηθούν με ακρίβεια και σε πεπερασμένο χρόνο | sqrt(x); // Υπολογίζεται αποτελεσματικά | 
Τρόποι Αναπαράστασης Αλγορίθμων
Τέσσερις είναι οι βασικοί τρόποι αναπαράστασης ενός αλγορίθμου:
1. Ελεύθερο Κείμενο
Ο πιο αδόμητος τρόπος παρουσίασης αλγορίθμου.
// Παίρνουμε τρεις αριθμούς, τους προσθέτουμε και διαιρούμε με το 3
Πρόβλημα: Αποτελεσματικότητα - Μπορεί να είναι ασαφές πώς ακριβώς εκτελείται
2. Διάγραμμα Ροής
Γραφικός τρόπος παρουσίασης του αλγορίθμου.
Σπανίζει η αποκλειστική τους χρήση στον προγραμματισμό.
3. Φυσική Γλώσσα σε Βήματα
Περιγραφή του αλγορίθμου σε βήματα.
Βήμα 2: Υπολόγισε το άθροισμα α+β+γ
Βήμα 3: Διάιρεσε το άθροισμα με το 3
Βήμα 4: Εμφάνισε το αποτέλεσμα
Πρόβλημα: Καθοριστικότητα - Μπορεί να υπάρχουν ασάφειες
4. Κωδικοποίηση σε C
Απευθείας υλοποίηση σε γλώσσα προγραμματισμού.
int main() {
int a, b, c;
float mo;
printf("Δώστε τρεις αριθμούς: ");
scanf("%d %d %d", &a, &b, &c);
mo = (a + b + c) / 3.0;
printf("Μέσος όρος: %.2f\n", mo);
return 0;
}
Πλεονέκτημα: Ακριβής και εκτελέσιμος κώδικας
Ασκήσεις Κατανόησης
Άσκηση 1: Σωστό ή Λάθος;
Χαρακτηρίστε αν είναι σωστές [Σ] ή λάθος [Λ] οι παρακάτω προτάσεις:
α) Η έννοια του αλγορίθμου συνδέεται αποκλειστικά και μόνο με προβλήματα της Πληροφορικής.
β) Ο πιο δομημένος τρόπος παρουσίασης αλγορίθμων είναι με ελεύθερο κείμενο.
γ) Σε ένα διάγραμμα ροής ο ρόμβος δηλώνει την αρχή και το τέλος του αλγορίθμου.
δ) Κάθε εντολή ενός αλγορίθμου πρέπει να καθορίζεται χωρίς αμφιβολία για τον τρόπο εκτέλεσής της.
ε) Η έξοδος ενός αλγορίθμου μπορεί να είναι είσοδος για κάποιον άλλο.
Άσκηση 2: Συμπλήρωση Κενών
Συμπληρώστε τα κενά στις παρακάτω προτάσεις:
α) Κάθε αλγόριθμος πρέπει να ικανοποιεί το κριτήριο της και έτσι κάποτε να τελειώνει.
β) Ο πιο ανεπεξέργαστος και αδόμητος τρόπος παρουσίασης ενός αλγορίθμου είναι με
γ) Στη γλώσσα C, η εντολή χρησιμοποιείται για είσοδο δεδομένων.
δ) Στη γλώσσα C, η εντολή χρησιμοποιείται για έξοδο δεδομένων.
Άσκηση 3: Ταξινόμηση Εννοιών
Δίνονται οι παρακάτω έννοιες. Ταξινομήστε τις στις στήλες:
| Κριτήρια Αλγορίθμου | Τρόποι Περιγραφής | 
|---|---|
Αποτελέσματα:
"; for (const [question, correctAnswer] of Object.entries(correctAnswers.exercise1)) { const selectedOption = document.querySelector(`input[name="${question}"]:checked`); const questionText = document.querySelector(`p:has(input[name="${question}"])`).textContent; if (selectedOption) { if (selectedOption.value === correctAnswer) { resultHtml += `${questionText} - Σωστό
`; } else { resultHtml += `${questionText} - Λάθος (Σωστή απάντηση: ${correctAnswer})
`; allCorrect = false; } } else { resultHtml += `${questionText} - Δεν απαντήθηκε
`; allCorrect = false; } } const resultElement = document.getElementById("result1"); resultElement.style.display = "block"; if (allCorrect) { resultElement.className = "result result-correct"; resultElement.innerHTML = "Συγχαρητήρια! Όλες οι απαντήσεις είναι σωστές!
" + resultHtml; } else { resultElement.className = "result result-incorrect"; resultElement.innerHTML = resultHtml; } } // Έλεγχος Άσκησης 2 function checkExercise2() { let allCorrect = true; let resultHtml = "Αποτελέσματα:
"; for (const [question, correctAnswer] of Object.entries(correctAnswers.exercise2)) { const userAnswer = document.getElementById(question).value.trim().toLowerCase(); const inputElement = document.getElementById(question); if (userAnswer === correctAnswer.toLowerCase()) { inputElement.style.backgroundColor = "#c6f6d5"; inputElement.style.border = "1px solid #38a169"; resultHtml += `Σωστή απάντηση!
`; } else { inputElement.style.backgroundColor = "#fed7d7"; inputElement.style.border = "1px solid #e53e3e"; resultHtml += `Λάθος. Σωστή απάντηση: "${correctAnswer}"
`; allCorrect = false; } } const resultElement = document.getElementById("result2"); resultElement.style.display = "block"; if (allCorrect) { resultElement.className = "result result-correct"; resultElement.innerHTML = "Συγχαρητήρια! Όλες οι απαντήσεις είναι σωστές!
" + resultHtml; } else { resultElement.className = "result result-incorrect"; resultElement.innerHTML = resultHtml; } } // Έλεγχος Άσκησης 3 function checkExercise3() { const criteriaColumn = document.getElementById("criteria-column"); const representationColumn = document.getElementById("representation-column"); const userCriteria = Array.from(criteriaColumn.querySelectorAll('.drag-item')).map(item => item.textContent); const userRepresentation = Array.from(representationColumn.querySelectorAll('.drag-item')).map(item => item.textContent); let criteriaCorrect = JSON.stringify(userCriteria.sort()) === JSON.stringify(correctAnswers.exercise3.criteria.sort()); let representationCorrect = JSON.stringify(userRepresentation.sort()) === JSON.stringify(correctAnswers.exercise3.representation.sort()); const resultElement = document.getElementById("result3"); resultElement.style.display = "block"; if (criteriaCorrect && representationCorrect) { resultElement.className = "result result-correct"; resultElement.innerHTML = "Συγχαρητήρια! Η ταξινόμηση είναι σωστή!
"; } else { resultElement.className = "result result-incorrect"; let errors = []; if (!criteriaCorrect) { errors.push("Υπάρχουν λάθη στη στήλη 'Κριτήρια'"); } if (!representationCorrect) { errors.push("Υπάρχουν λάθη στη στήλη 'Τρόποι Περιγραφής'"); } resultElement.innerHTML = `Η ταξινόμηση δεν είναι σωστή. ${errors.join(' και ')}.
`; } } // Επαναφορά όλων function resetAll() { // Επαναφορά Άσκησης 1 document.querySelectorAll('input[type="radio"]').forEach(radio => { radio.checked = false; }); // Επαναφορά Άσκησης 2 document.querySelectorAll('.input-field').forEach(input => { input.value = ""; input.style.backgroundColor = ""; input.style.border = ""; }); // Επαναφορά Άσκησης 3 const dragSource = document.getElementById("drag-source"); const criteriaColumn = document.getElementById("criteria-column"); const representationColumn = document.getElementById("representation-column"); // Μετακίνηση όλων των στοιχείων πίσω στην πηγή const allItems = document.querySelectorAll('.drag-item'); allItems.forEach(item => { if (item.parentNode !== dragSource) { dragSource.appendChild(item); } }); // Επαναφορά αποτελεσμάτων document.querySelectorAll('.result').forEach(result => { result.style.display = "none"; result.innerHTML = ""; }); alert("Όλες οι απαντήσεις επαναφέρθηκαν!"); } // Drag and drop λειτουργικότητα document.addEventListener('DOMContentLoaded', function() { let draggedItem = null; // Προσθήκη drag events στα αντικείμενα const items = document.querySelectorAll('.drag-item'); const columns = document.querySelectorAll('#criteria-column, #representation-column'); items.forEach(item => { item.setAttribute('draggable', 'true'); item.addEventListener('dragstart', function() { draggedItem = this; setTimeout(() => this.style.opacity = '0.5', 0); }); item.addEventListener('dragend', function() { setTimeout(() => { this.style.opacity = '1'; draggedItem = null; }, 0); }); }); columns.forEach(column => { column.addEventListener('dragover', function(e) { e.preventDefault(); }); column.addEventListener('dragenter', function(e) { e.preventDefault(); this.style.backgroundColor = '#e2e8f0'; }); column.addEventListener('dragleave', function() { this.style.backgroundColor = ''; }); column.addEventListener('drop', function(e) { e.preventDefault(); this.style.backgroundColor = ''; if (draggedItem) { this.appendChild(draggedItem); } }); }); });Ημερολόγιο
Ανακοινώσεις
Όλες...- - Δεν υπάρχουν ανακοινώσεις -
