ΠΟΛΥΤΕΧΝΕΙΟ ΚΡΗΤΗΣ
Τμήμα Ηλεκτρονικών Μηχ. και Μηχ. Υπολογιστών

ΛΟΓ 102: Τεχνολογία Λογισμικού Ι
http://www.softlab.ntua.gr/~nickie/TUC/log102/

1η Σειρά Ασκήσεων
Υποδείξεις


Άσκηση 1

Ένας φυσικός αριθμός μεγαλύτερος του 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, θα πρέπει στην επόμενη εκτύπωση να γίνεται αλλαγή γραμμής και να αρχικοποιείται κατάλληλα ο μετρητής.


Άσκηση 2

Οι παράμετροι 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 με τα οποία ελέγξατε αν λειτουργούν σωστά.


Άσκηση 3

Η συνάρτηση 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 .