από D.emkas » 12 Μαρ 2013, 20:51
Όλο το αρχείο; 1. Μεταβλητές καταχωρητών (register), καθολικές (global), εξωτερικές (extern) και στατικές (static) μεταβλητές:
A. Κατεβάστε από το e-class τη δομή του πρoγράμματος που θα βρείτε στον υποφάκελο register-extern του εργαστηρίου 2, ex1. Εντός του αρχείου def_func.c να υλοποιήσετε τη συνάρτηση int power(register int x, register int y) για τον υπολογισμό της δύναμης xy.
Β. Ποιο είναι το πλεονέκτημα από τη χρήση των μεταβλητών τύπου register στο συγκεκριμένο παράδειγμά σε σχέση με τις απλές τοπικές μεταβλητές; Θα ήταν εφικτή η υλοποίηση της συνάρτησης int power(register int *x, register int *y) με τη χρήση μεταβλητών καταχωρητών;
Γ. Eντός του αρχείου my_func.c να υλοποιηθεί η συνάρτηση display(int x, int y, int z) για την εμφάνιση των αρχικών τιμών (x και y) και του αποτελέσματος (z) της ύψωσης σε δύναμη.
Δ. Εντός της main() καλέστε τη συνάρτηση display() με τους εξής τρόπους: (i) δηλώνοντάς τη στο αρχείο def_head.h. (ii) δηλώνοντάς τη ως εξωτερική μεταβλητή (extern) στη main() .
E. Eντός του def_func.c ορίστε την καθολική μεταβλητή cοunt τύπου int που θα αυξάνεται κατά 1 κάθε φορά που θα καλείται η power(). H count θα πρέπει να είναι επίσης προσβάσιμη από τη display() ώστε να εκτυπώνει την τρέχουσα τιμή της.
ΣΤ. Μετατρέψτε την καθολική μεταβλητή count σε στατική (static). Τι παρατηρείτε και για ποιο λόγο; Πραγματοποιήστε τις απαραίτητες διορθώσεις έτσι ώστε η μετάφραση του προγράμματος να είναι επιτυχής.
Η. Ορίστε την count σαν τοπική στατική (static) εντός της power(), πραγματοποιώντας όλες τις απαιτούμενες ενέργειες, ώστε το πρόγραμμα να εκτελείται κανονικά.
Θ. Ποια κατά τη γνώμη σας είναι τα πλεονεκτήματα – μειονεκτήματα της χρήσης της count ως global, static global, static local. Ποια από τις παραπάνω υλοποιήσεις θα προκρίνατε στο συγκεκριμένο παράδειγμα και για ποιο λόγο;
ορίστε!
επιπλέον ο λαθος κώδικας π έχω γράψει είναι ο :
#include <stdio.h>
int count1=0;
int power( int x, int y)
{
int i;
int b=x;
for(i=0;i<y-1;i++)
{
count1=count1+1;
x=x*b;
}
return(x,count1);
}
int display( int x,int y,int z)
{
z=power(x,y);
return(z);
printf("x^y=%d to count einai %d",z);
}
main()
{
extern int count1;
int a;
int b;
int c;
printf("dwse ena a \n");
scanf("%d",&a);
printf("dwse ena b \n");
scanf("%d",&b);
c=display(a,b,c);
}