Μάθημα : ΥΛΙΚΟ

Κωδικός : 0552100273

1007090236  -  ΝΙΚΟΛΑΟΣ ΜΑΡΑΓΚΟΣ

Μάθημα

- Το μάθημα δεν διαθέτει περιγραφή -

Ενότητες

 

Αλγόριθμοι και Προγραμματισμός στη C

Διαδραστικό Φύλλο Εργασίας

Τι είναι Αλγόριθμος

Αλγόριθμος είναι:

  • Μια πεπερασμένη σειρά ενεργειών,
  • Αυστηρά καθορισμένων και
  • Εκτελέσιμων σε πεπερασμένο χρόνο, που
  • Στοχεύουν στην επίλυση ενός προβλήματος.

Κριτήρια Αλγορίθμου

Κριτήριο Περιγραφή Παράδειγμα σε C
Είσοδος Κατά την εκκίνηση καμία, μία ή περισσότερες τιμές δεδομένων πρέπει να δίνονται ως είσοδοι scanf("%d", &number);
Έξοδος Στο τέλος πρέπει να εξάγει κάποιο αποτέλεσμα μετά την επεξεργασία των δεδομένων printf("Αποτέλεσμα: %d", result);
Καθοριστικότητα Κάθε εντολή δεν πρέπει να αφήνει περιθώρια ασάφειας ή παρερμηνείας result = (a + b) * c; // Σαφής πράξη
Περατότητα Κάθε εκτέλεση τελειώνει ύστερα από πεπερασμένο αριθμό βημάτων for(int i=0; i<10; i++) { ... } // Πεπερασμένος βρόχος
Αποτελεσματικότητα Όλες οι διαδικασίες μπορούν να πραγματοποιηθούν με ακρίβεια και σε πεπερασμένο χρόνο sqrt(x); // Υπολογίζεται αποτελεσματικά

Τρόποι Αναπαράστασης Αλγορίθμων

Τέσσερις είναι οι βασικοί τρόποι αναπαράστασης ενός αλγορίθμου:

1. Ελεύθερο Κείμενο

Ο πιο αδόμητος τρόπος παρουσίασης αλγορίθμου.

// Πρόβλημα: Υπολογισμός μέσου όρου
// Παίρνουμε τρεις αριθμούς, τους προσθέτουμε και διαιρούμε με το 3

Πρόβλημα: Αποτελεσματικότητα - Μπορεί να είναι ασαφές πώς ακριβώς εκτελείται

2. Διάγραμμα Ροής

Γραφικός τρόπος παρουσίασης του αλγορίθμου.

Αρχή
Διάβασε α, β, γ
mo = (α+β+γ)/3
Εκτύπωσε mo
Τέλος

Σπανίζει η αποκλειστική τους χρήση στον προγραμματισμό.

3. Φυσική Γλώσσα σε Βήματα

Περιγραφή του αλγορίθμου σε βήματα.

Βήμα 1: Διάβασε τους αριθμούς α, β, γ
Βήμα 2: Υπολόγισε το άθροισμα α+β+γ
Βήμα 3: Διάιρεσε το άθροισμα με το 3
Βήμα 4: Εμφάνισε το αποτέλεσμα

Πρόβλημα: Καθοριστικότητα - Μπορεί να υπάρχουν ασάφειες

4. Κωδικοποίηση σε C

Απευθείας υλοποίηση σε γλώσσα προγραμματισμού.

#include <stdio.h>

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: Ταξινόμηση Εννοιών

Δίνονται οι παρακάτω έννοιες. Ταξινομήστε τις στις στήλες:

Έξοδος
Περατότητα
Διάγραμμα ροής
Καθοριστικότητα
Αποτελεσματικότητα
Είσοδος
Κωδικοποίηση σε C
Ελεύθερο κείμενο
Φυσική γλώσσα σε βήματα
Κριτήρια Αλγορίθμου Τρόποι Περιγραφής
Έλεγχος Ταξινόμησης
Επαναφορά Όλων // Σωστές απαντήσεις const correctAnswers = { exercise1: { 'q1_a': 'Λ', 'q1_b': 'Λ', 'q1_c': 'Λ', 'q1_d': 'Σ', 'q1_e': 'Σ' }, exercise2: { 'q2_a': 'περατότητας', 'q2_b': 'ελεύθερο κείμενο', 'q2_c': 'scanf', 'q2_d': 'printf' }, exercise3: { criteria: ['Έξοδος', 'Περατότητα', 'Καθοριστικότητα', 'Αποτελεσματικότητα', 'Είσοδος'], representation: ['Διάγραμμα ροής', 'Κωδικοποίηση σε C', 'Ελεύθερο κείμενο', 'Φυσική γλώσσα σε βήματα'] } }; // Έλεγχος Άσκησης 1 function checkExercise1() { let allCorrect = true; let resultHtml = "

Αποτελέσματα:

"; 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); } }); }); });

Ημερολόγιο

Προθεσμία
Γεγονός μαθήματος
Γεγονός συστήματος
Προσωπικό γεγονός

Ανακοινώσεις

Όλες...
  • - Δεν υπάρχουν ανακοινώσεις -