Α.Μ. ΒΑΘΜΟΣ ΣΧΟΛΙΑ -Δεν εκτελείτε κάποιο loop για το πλήθος των επαναλήψεων που 1413 FAIL θα κληθεί η ανάγνωση και η εγγραφή από το αρχείο. -Το άνοιγµα και κλείσιµο του αρχείου γίνεται σωστά. Έχετε αποστείλει 2 αρχεία lab11.c και lab11b.c. Το lab11b.c δε γίνεται µε ανάγνωση του αρχείου χαρακτήρα προς χαρακτήρα οπότε δε λαµβάνεται υπόψην. -Το πρόγραµµα εµφανίζει warning για unused variable. 1417 Καλό θα είναι να µην εµφανίζονται καθόλου τετοια µηνύµατα. -Το πλήθος των επαναλήψεων αρκετά σωστά. Θα ήτανε πιο εύκολο ίσως να χρησιµοποιήσετε τα SEEK_SET και SEEK_END και µετατοπίσεις βάσει του i στην fseek. Καταρχήν έχετε λάθος στο δευτερο for, αντί για j++ κάνετε i++ και δεν τελειώνει ποτέ η εκτέλεση. 1420 Εν συνεχεία έχετε λάθος στο πρώτο fseek, θέλει 9 και όχι 10 θέσεις. Επιπλέον δεν χρειάζεται αυτό το if πού χετε µέσα στα for, αλλά χρειάζεστε τις εντολές fseek(foutput,21,seek_cur); fputc('\n',foutput); να εκτελούνται κάθε φορά που τελειώνει η εµφωλευµένη for. 1424 1426 1428 Το πλήθος των επαναλήψεων δε γίνεται σωστά. Το πρόγραµµα δουλεύει σωστά µόνο για µικρά νούµερα. Σωστή χρήση των fseek και της ανάγνωσης και εγγραφής χαρακτήρα προς χαρακτήρα. Ο κώδικας δεν εµφανίζει κάποιες γραµµές, το οποίο όµως λ ύνεται αν οι επαναλήψεις στη for γίνουν µέχρι το 110. -Πολύ καλή δουλειά, σωστά αποτελέσµατα στην έξοδο. -if(argc<2): Ο έλεγχος θα έπρεπε να γίνεται µε if(argc!=3). -Τέλος καλό θα ήτανε να κάνατε #define τις διαστάσεις του πίνακα και να χρησιµοποιείτε τις defined διαστάσεις. Page 1
1429 1430 1433 1435 1436 Ο κώδικας δεν εµφανίζει κάποιες γραµµές, το οποίο όµως λύνεται αν οι επαναλήψεις στην for γίνουν µέχρι το 110. Επειδή ο µετρητής ξεκινά από το 1 θα πρέπει ο έλεγχος να γίνεται µέχρι και το 110. Δεν χρησιµοποιούνται σχόλια. Δεν έχετε ορίσει µε define µεταβλητές για το µήκος των γραµµών. Δεν κλείνετε µε fclose τους δείκτες αρχείων. Σας λείπει ενα fseek(input,2,seek_cur); ακριβώς µετά την εµφωλιασµένη for, ώστε να πηγαίνει στον σωστό χαρακτήρα και να µην διαβάζει άδικα το enter. Δε γίνεται fclose. - Λάθος στον αλγόριθµο Έχετε αποστείλει 2 αρχεία lab11.c και lab11b.c. Το lab11b.c δε γίνεται µε ανάγνωση του αρχείου χαρακτήρα προς χαρακτήρα οπότε δε λαµβάνεται υπόψην. -Το πρόγραµµα εµφανίζει warning για unused variable. Καλό θα είναι να µην εµφανίζονται καθόλου τετοια µηνύµατα. -Το πλήθος των επαναλήψεων αρκετά σωστά. Θα ήτανε πιο εύκολο ίσως να χρησιµοποιήσετε τα SEEK_SET και SEEK_END και µετατοπίσεις βάσει του i στην fseek. Page 2
1440 Sheet2 Μόνο που δεν εκτυπώνεται το ονοµα του αρχείου σε. Σε περίπτωση λάθος αριθµού ορισµάτων δεν τερµατίζει το πρόγραµµα. Δεν γίνεται fclose. Σωστός αριθµός επαναλήψεων στα for. Χρήση σχολίων. Προκύπτει η ζητούµενη έξοδος. 1442 1445 FAIL 1447 1448 1449 pass πολύ πολύ - δεν έχετε χρησιµοποιήσει define για τα µεγέθη των εικόνων - Δεν κάνετε έλεγχο για το πληθος των ορισµάτων - Χρειάζεται µία ακόµη fseek για να επαναφέρετε τη θέση εγγραφής cols θέεσεις πίσω. Ουσιαστικά γράφετε κάθε φοα πάνω στην προηγούµενη θέση.. - Δεν αντιγράφετε σωστά το χαρακτ. '\n' - Να χρησιµοποιείτε αντί για αριθµούς τις #defined µεταβλητές -για να κάνει σωστές επαναλήψεις θα έπρεπε να µηδενίζετε τον µετρητή µετά από κάθε επανάληψη εκτύπωσης - Παίρνετε σχεδόν fail επειδή οι έλεγχοι για τα ορίσµατα ήταν όλοι λάθος. - Για το πλήθος των ορισµάτων αρκούσε ο έλεγχος if(argc!= 3). Οι υπόλοιποι δύο έλεγχοι έιναι άχρηστοι-λάθος. Δεν απαιτείται κάποιος έλεγχος για τα ονόµατα των αρχείων. - Ο αλγόριθµός σας θα δούλευε σωστά µε 2 µικροδιορθώσεις. Αν 1) στην πρώτη fseek βάζατε pos_one*(2*m+1) αντί του pos_one*2*m και 2) σβήνατε την 3η fseek. - Παίρνετε σχεδόν fail επειδή οι έλεγχοι για τα ορίσµατα ήταν όλοι λάθος. - Για το πλήθος των ορισµάτων αρκούσε ο έλεγχος if(argc!= 3). Οι υπόλοιποι δύο έλεγχοι έιναι άχρηστοι-λάθος. Δεν απαιτείται κάποιος έλεγχος για τα ονόµατα των αρχείων. - Ο αλγόριθµός σας θα δούλευε σωστά µε 2 µικροδιορθώσεις. Αν 1) στην πρώτη fseek βάζατε pos_one*(2*m+1) αντί του pos_one*2*m και 2) σβήνατε την 3η fseek. Page 3
1454 1456 1458 1459 1460 1462 1463 1464 1465 1467 1468 - δεν έχετε χρησιµοποιήσει define για τα µεγέθη των εικόνων -για να κάνει σωστές επαναλήψεις θα έπρεπε να µηδενίζετε τον µετρητή µετά από κάθε επανάληψη εκτύπωσης - δεν έχετε χρησιµοποιήσει define για τα µεγέθη των εικόνων -Θα ήταν καλύτερο να κάνετε define ξεχωριστά γραµµές και στήλες Ο κώδικας δεν εµφανίζει κάποιες γραµµές, το οποίο όµως λ ύνεται αν οι επαναλήψεις στη for γίνουν µέχρι το 110. Δεν έχεις ορίσει µε define µεταβλητές για το µήκος των γραµµών. Δέν ελέγχεις πόσα ορίσµατα δίνει ο χρήστης. Το τελευταίο fseek που κάνεις θέλει 2 αντί για 1 θέσεις, fseek(s1,2,seek_cur); - Μ' αυτή σας την υλοποίηση αντιγράφετε στο αρχ. εξόδου 2 φορές το χαρακτήρα '\n'. - Έπρεπε, αφού αντιγράφατε τους 10 χαρακτήρες της κάθε σειράς στο εσωτ. for να γράφατε τον επόιµενο χαρακτ. (δλδ το '\n') στο τέλος της αντίστοιχης σειράς στο αρχ. εξόδου - το πρόγραµµα κάνει την αντιγραφή αλλά αντί για δίπλα βάζει το σχέδιο από κάτω Δεν έχετε λάβει υπόψη σας, τι θα συµβεί αν η τελευταία γραµµή του αρχείου τελειώνει µε EOFκαι όχι µε enter. Θά πρεπε να συµπεριλάβετε και το c!=eofστο if πού χετε. -Πολύ καλή δουλειά, σωστά αποτελέσµατα στην έξοδο. -if(argc<2): Ο έλεγχος θα έπρεπε να γίνεται µε if(argc!=3). -Τέλος καλό θα ήτανε να κάνατε #define τις διαστάσεις του πίνακα και να χρησιµοποιείτε τις defined διαστάσεις. Page 4
1470 1474 1483 Δεν έχετε λάβει υπόψη σας, τι θα συµβεί αν η τελευταία γραµµή του αρχείου τελειώνει µε EOFκαι όχι µε enter. Θά πρεπε να συµπεριλάβετε και το c!=eofστο if πού χετε. Δε γίνεται fclose. - Λάθος στον αλγόριθµο Δεν έχετε ορίσει µε define µεταβλητές για το µήκος των γραµµών. Δεν κλείνετε µε fclose τους δείκτες αρχείων. Σας λείπει ενα fseek(input,2,seek_cur); ακριβώς µετά την εµφωλιασµένη for, ώστε να πηγαίνει στον σωστό χαρακτήρα και να µην διαβάζει άδικα το enter. 1484 FAIL - Να χρησιµοποιείτε αντί για αριθµούς τις #defined µεταβλητές 1485 FAIL Λάθος αρχείο 1486 -Πρέπει να κάνετε fclose() 1487 - Δεν κάνετε έλεγχο για το πληθος των ορισµάτων - Για να ξανα-αντιγράψετε το χαρακτ. στο αρχείο εξόδου πρέπει να µετακινηθείτε Ν-1 θέσεις κ όχι Ν. - Χρειάζεται µία ακόµη fseek στο εσωτ. for για να επαναφέρετε τη θέση εγγραφής Ν θέεσεις πίσω. - Έπρεπε, αφού αντιγράφατε τους 10 χαρακτήρες της κάθε σειράς στο εσωτ. for να γράφατε τον επόιµενο χαρακτ. (δλδ το '\n') στο τέλος της αντίστοιχης σειράς στο αρχ. εξόδου - Μ' αυτή σας την υλοποίηση αντιγράφετε στο αρχ. εξόδου 2 φορές το χαρακτήρα '\n'. - Έπρεπε, αφού αντιγράφατε τους 10 χαρακτήρες της κάθε σειράς στο εσωτ. for να γράφατε τον επόιµενο χαρακτ. (δλδ το '\n') στο τέλος της αντίστοιχης σειράς στο αρχ. εξόδου Page 5
1489 πολύ 1490 Sheet2 Ο έλεγχος του argc δεν γίνεται πριν την προσπέλαση στο argv. Συγκεκριµένα, η µετατροπή του argv[2] σε αριθµό γίνεται πριν τον έλεγχο για τον αριθµό των ορισµάτων. Αν και λόγω της τοποθέτησης της µετατροπής του argv[2] σε αριθµό πριν τον έλεγχο για το πλήθος των ορισµάτων, αν δοθεί λάθος αριθµός ορισµάτων θα εµφανιστεί segmentation fault κ οχι το ζητούµενο µήνυµα. Δεν γίνεται fclose. Τα µεγέθη των εικόνων δεν ορίζονται µε #define. Σωστός αριθµός επαναλήψεων στα for. Προκύπτει η ζητούµενη έξοδος. Χρήση σχολίων. Δεν έχετε ορίσει µε define µεταβλητές για το µήκος των γραµµών. Δεν κλείνετε µε fclose τους δείκτες αρχείων. Σας λείπει ενα fseek(input,2,seek_cur); ακριβώς µετά την εµφωλιασµένη for, ώστε να πηγαίνει στον σωστό χαρακτήρα και να µην διαβάζει άδικα το enter. 1492 1493 1497 -Δείτε τις λύσεις. 1498 - Πρέπει να βάζετε σχόλια στον κώδικά σας 1501 1502 Δεν έχετε λάβει υπόψη σας, τι θα συµβεί αν η τελευταία γραµµή του αρχείου τελειώνει µε EOFκαι όχι µε enter. Θά πρεπε να συµπεριλάβετε και το c!=eofστο if πού χετε. - το πρόγραµµα κάνει την αντιγραφή αλλά αντί για δίπλα βάζει το σχέδιο από κάτω -Το πρόγραµµα εµφανίζει warning για unused variable. Καλό θα είναι να µην εµφανίζονται καθόλου τετοια µηνύµατα. -Η fseek δε χρησιµοποιείται σωστά και το πρόγραµµα δεν τυπώνει σωστά αποτελέσµατα. Δεν έχετε λάβει υπόψη σας, τι θα συµβεί αν η τελευταία γραµµή του αρχείου τελειώνει µε EOFκαι όχι µε enter. Θά πρεπε να συµπεριλάβετε και το c!=eofστο if πού χετε. Page 6
1503 1504 1505 1506 1508 1510 FAIL -Το πρόγραµµα εµφανίζει warning για unused variable. Καλό θα είναι να µην εµφανίζονται καθόλου τετοια µηνύµατα. -Η fseek δε χρησιµοποιείται σωστά και το πρόγραµµα δεν τυπώνει σωστά αποτελέσµατα. -Δείτε τις λύσεις. Το πλήθος των επαναλήψεων δε γίνεται σωστά. Το πρόγραµµα δουλεύει σωστά µόνο για µικρά νούµερα. Σωστή χρήση των fseek και της ανάγνωσης και εγγραφής χαρακτήρα προς χαρακτήρα. - Λάθος βήµα στην 1η fseek. - Σκεφτείτε ότι τον χαρακτ. στη θέση 1 του αρχ. εισόδου θα τον γράψει στις θέσεις 1 κ 11 του αρχ. εξόδου. 'Οµως, τον χαρακτ. στη θέση 11 του αρχ. εισόδου θα τον γράψει πάλι στη θέση 11 του αρχ. εξόδου κ.ο.κ. - Θα ήταν προτιµότερο να προσπελαύνετε την εικόνα χρησιµοπ. δύο for κ ν' αντιγράφετε τον τελευταίο χαρακτ. κάθε γραµµής('\n') µόνο µία φορά στο αρχ. εξόδου. - Λάθος βήµα στην 1η fseek. - Σκεφτείτε ότι τον χαρακτ. στη θέση 1 του αρχ. εισόδου θα τον γράψει στις θέσεις 1 κ 11 του αρχ. εξόδου. 'Οµως, τον χαρακτ. στη θέση 11 του αρχ. εισόδου θα τον γράψει πάλι στη θέση 11 του αρχ. εξόδου κ.ο.κ. - Θα ήταν προτιµότερο να προσπελαύνετε την εικόνα χρησιµοπ. δύο for κ ν' αντιγράφετε τον τελευταίο χαρακτ. κάθε γραµµής('\n') µόνο µία φορά στο αρχ. εξόδου. - δεν έχετε χρησιµοποιήσει define για τα µεγέθη των εικόνων - Δεν κάνετε έλεγχο για το πληθος των ορισµάτων - Για να ξανα-αντιγράψετε το χαρακτ. στο αρχείο εξόδου πρέπει να µετακινηθείτε Ν-1 θέσεις κ όχι Ν. - Χρειάζεται µία ακόµη fseek στο εσωτ. for για να επαναφέρετε τη θέση εγγραφής Ν θέεσεις πίσω. - Έπρεπε, αφού αντιγράφατε τους 10 χαρακτήρες της κάθε σειράς στο εσωτ. for να γράφατε τον επόιµενο χαρακτ. (δλδ το '\n') στο τέλος της αντίστοιχης σειράς στο αρχ. εξόδου - Να χρησιµοποιείτε αντί για αριθµούς τις #defined µεταβλητές Page 7
1511 1514 1516 1517 Σε περίπτωση που υπάρχει λάθος στο άνοιγµα του αρχείου, δεν τυπώνεται το σωστό µήνυµα (δεν τυπώνεται τίποτα). Στο εσωτερικό for χρησιµοποιούνται 2 µεταβλητές, ωστόσο αρκεί η χρήση µιας µόνο ως µετρητής. Δεν προκύπτει ακριβώς το ζητούµενο αποτέλεσµα, το οποίο οφείλεται στο ότι στον έλεγχο των επαναλήψεων ο µετρητής πρέπει να φτάνει µέχρι το 110 και όχι µέχρι το 100. - Μ' αυτή σας την υλοποίηση αντιγράφετε στο αρχ. εξόδου 2 φορές το χαρακτήρα '\n'. - Έπρεπε, αφού αντιγράφατε τους 10 χαρακτήρες της κάθε σειράς στο εσωτ. for να γράφατε τον επόιµενο χαρακτ. (δλδ το '\n') στο τέλος της αντίστοιχης σειράς στο αρχ. εξόδου - δεν έχει έλεγχο για τον αριθµό των ορισµάτων Καταρχήν έχετε λάθος στο δευτερο for, αντί για j++ κάνετε i++ και δεν τελειώνει ποτέ η εκτέλεση. Εν συνεχεία έχετε λάθος στο πρώτο fseek, θέλει 9 και όχι 10 θέσεις. Επιπλέον δεν χρειάζεται αυτό το if πού χετε µέσα στα for, αλλά χρειάζεστε τις εντολές fseek(foutput,21,seek_cur); fputc('\n',foutput); να εκτελούνται κάθε φορά που τελειώνει η εµφωλευµένη for. 1519 - Πρέπει να βάζετε σχόλια στον κώδικά σας 1524 1525 1528 FAIL Λάθος αρχείο Page 8
1531 1532 πολύ 1533 FAIL 1534 Sheet2 Ο έλεγχος του argc δεν γίνεται πριν την προσπέλαση στο argv. Συγκεκριµένα, η µετατροπή του argv[2] σε αριθµό γίνεται πριν τον έλεγχο για τον αριθµό των ορισµάτων. Αν και λόγω της τοποθέτησης της µετατροπής του argv[2] σε αριθµό πριν τον έλεγχο για το πλήθος των ορισµάτων, αν δωθεί λάθος αριθµός ορισµάτων θα εµφανιστεί segmentation fault κ οχι το ζητούµενο µήνυµα. Δεν γίνεται fclose. Τα µεγέθη των εικόνων δεν ορίζονται µε #define. Σωστός αριθµός επαναλήψεων στα for. Προκύπτει η ζητούµενη έξοδος. Χρήση σχολίων. - Δεν κάνετε έλεγχο για το πληθος των ορισµάτων - Χρειάζεται µία ακόµη fseek για να επαναφέρετε τη θέση εγγραφής cols θέεσεις πίσω. Ουσιαστικά γράφετε κάθε φοα πάνω στην προηγούµενη θέση.. - Δεν αντιγράφετε σωστά το χαρακτ. '\n' - Να χρησιµοποιείτε αντί για αριθµούς τις #defined µεταβλητές Σε περίπτωση που υπάρχει λάθος στο άνοιγµα του αρχείου, δεν τυπώνεται το σωστό µήνυµα (δεν τυπώνεται τίποτα). Στο εσωτερικό for χρησιµοποιούνται 2 µεταβλητές, ωστόσο αρκεί η χρήση µιας µόνο ως µετρητής. Δεν προκύπτει ακριβώς το ζητούµενο αποτέλεσµα, το οποίο οφείλεται στο ότι στον έλεγχο των επαναλήψεων ο µετρητής πρέπει να φτάνει µέχρι το 110 και όχι µέχρι το 100. Page 9
1537 1539 1542 1543 1547 1550 Sheet2 Μόνο που δεν εκτυπώνεται το ονοµα του αρχείου σε. Σε περίπτωση λάθος αριθµού ορισµάτων δεν τερµατίζει το πρόγραµµα. Δεν γίνεται fclose. Σωστός αριθµός επαναλήψεων στα for. Χρήση σχολίων. Προκύπτει η ζητούµενη έξοδος. -Πρέπει να κάνετε fclose() - δεν έχει έλεγχο για τον αριθµό των ορισµάτων -Θα ήταν καλύτερο να κάνετε define ξεχωριστά γραµµές και στήλες Ο κώδικας δεν εµφανίζει κάποιες γραµµές, το οποίο όµως λύνεται αν οι επαναλήψεις στην for γίνουν µέχρι το 110. Επειδή ο µετρητής ξεκινά από το 1 θα πρέπει ο έλεγχος να γίνεται µέχρι και το 110. Δεν χρησιµοποιούνται σχόλια. Page 10