ΠΟΛΥΤΕΧΝΕΙΟ
ΚΡΗΤΗΣ Τμήμα Ηλεκτρονικών Μηχ. και Μηχ. Υπολογιστών ΛΟΓ 102: Τεχνολογία Λογισμικού
Ι |
Ένας φυσικός αριθμός μεγαλύτερος του 1 λέγεται πρώτος αν διαιρείται μόνο με το 1 και τον εαυτό του. Οι ακόλουθοι είναι οι δέκα μικρότεροι πρώτοι αριθμοί: 2, 3, 5, 7, 11, 13, 17, 19, 23, 29. Αντίθετα, οι 15 και 49 δεν είναι πρώτοι, γιατι διαιρούνται αντίστοιχα με το 3 και το 7.
Ένας απλός αλγόριθμος για την εκτύπωση των πρώτων αριθμών μεταξύ 1 και n είναι ο ακόλουθος:
για m από 2 ως n αν ο m είναι πρώτος, τότε τύπωσέ τον m
Ένας απλός αλγόριθμος που αποφασίζει αν ο αριθμός m είναι πρώτος είναι ο ακόλουθος:
για i από 2 ως m αν το υπόλοιπο της ακέραιας διαίρεσης του m με τον i είναι 0, τότε ο m δεν είναι πρώτος ο m είναι πρώτος
Για να εκτυπώνονται μέχρι 8 αριθμοί σε κάθε γραμμή, πρέπει να κρατάτε ένα μετρητή που θα αυξάνει με κάθε εκτύπωση. Όταν αυτός ο μετρητής ξεπεράσει το 8, θα πρέπει στην επόμενη εκτύπωση να γίνεται αλλαγή γραμμής και να αρχικοποιείται κατάλληλα ο μετρητής.
Οι παράμετροι s
και s2
των συναρτήσεων my_strlen
και my_strcpy
αντίστοιχα δηλώνονται const
για να τονιστεί
ότι οι συναρτήσεις αυτές δεν θα αλλάζουν το περιεχόμενο των συμβολοσειρών s
και s2
.
Η συνάρτηση my_strcpy
θα πρέπει να αντιγράφει τη συμβολοσειρά
s2
στην s1
, καταστρέφοντας τα τυχόν περιεχόμενα της
s1
. Δηλαδή, το πρόγραμμα:
void main () { char s1 [10] = "abc"; char s2 [10] = "def"; my_strcpy(s1, s2); printf("%s\n", s1); }
θα πρέπει να τυπώνει τη συμβολοσειρά "def
".
Στην υλοποίηση των my_strlen
και my_strcpy
δε θα
πρέπει να κάνετε χρήση πινάκων, δηλαδή δε θα πρέπει να χρησιμοποιήσετε τα σύμβολα
"[
" και "]
".
Για ένα παράδειγμα αντιγραφής πινάκων (όχι συμβολοσειρών) δείτε τη διαφάνεια 2 της 4ης παρουσίασης, ενώ για ένα παράδειγμα με συμβολοσειρές δείτε τη διαφάνεια 3 της ίδιας παρουσίασης.
Αρκεί να παραδώσετε τις υλοποιήσεις των my_strlen
και my_strcpy
.
Δε χρειάζεται να παραδώσετε τα προγράμματα main
με τα οποία ελέγξατε
αν λειτουργούν σωστά.
Η συνάρτηση my_strrev
θα πρέπει να αλλάζει το περιεχόμενο της
συμβολοσειράς s
επί τόπου. Δηλαδή, το πρόγραμμα:
void main () { char s [10] = "hello"; my_strrev(s); printf("%s\n", s); }
θα πρέπει να τυπώνει τη συμβολοσειρά "olleh
".
Στην υλοποίηση της my_strrev
με πίνακες δε θα πρέπει να χρησιμοποιήσετε
το σύμβολο "*
" παρά μόνο στην επικεφαλίδα της συνάρτησης.
Αντίθετα, στην υλοποίηση με δείκτες δε θα πρέπει να χρησιμοποιήσετε τα σύμβολα
"[
" και "]
".
Για ένα παράδειγμα αντιστροφής πίνακα (όχι συμβολοσειράς) δείτε το αρχείο reverse.c. Χρησιμοποιεί τον πρώτο τρόπο (υλοποίηση με πίνακες). Το ίδιο πρόγραμμα με το δεύτερο τρόπο (υλοποίηση με δείκτες) βρίσκεται στο αρχείο reversep.c.
Αρκεί να παραδώσετε την υλοποίηση της my_strrev
. Δε χρειάζεται
να παραδώσετε τo πρόγραμμα main
με το οποίο ελέγξατε αν λειτουργεί
σωστά.
nickie@softlab.ntua.gr
).
13/3/2000
.