Τεχνικές Προγραμματισμού - Εργαστήρια [2012-2013]

Διδάσκοντες: Α. Καράκος, Αν. Καθηγητής

Τεχνικές Προγραμματισμού - Εργαστήρια [2012-2013]

Δημοσίευσηαπό D.emkas » 12 Μαρ 2013, 20:32

Aνοίγω γενικά το θέμα για να μπαίνουν απορίες επι των εργασιών στo εργαστήριο της C.

Επίσης θα θέσω τη πρώτη απορία σχετικά με την 1Ε: Eντός του def_func.c ορίστε την καθολική μεταβλητή cοunt τύπου int που θα αυξάνεται κατά 1 κάθε φορά που θα καλείται η power(). H count θα πρέπει να είναι επίσης προσβάσιμη από τη display() ώστε να εκτυπώνει την τρέχουσα τιμή της.

Πώς ακριβώς θα μεταφέρω την τιμή της count1 στην display για να την βγάλω στην οθόνη;
D.emkas
Newbie
 
Δημοσιεύσεις: 18
Εγγραφή: 12 Ιουν 2010, 15:18
Φοιτητής ΗΜΜΥ: Ναι

Re: Τεχνικές Προγραμματισμού - Εργαστήρια [2012-2013]

Δημοσίευσηαπό James » 12 Μαρ 2013, 20:38

Συμβουλή: Αν θέλετε να βοηθούν και οι μεγαλύτεροι, να επισυνάπτετε και τις εκφωνήσεις :)
(Μόνο) James
Άβαταρ μέλους
James
Διαχειριστής
 
Δημοσιεύσεις: 1740
Εγγραφή: 08 Ιαν 2008, 22:29
Φοιτητής ΗΜΜΥ: Όχι

Re: Τεχνικές Προγραμματισμού - Εργαστήρια [2012-2013]

Δημοσίευσηαπό 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);

}
D.emkas
Newbie
 
Δημοσιεύσεις: 18
Εγγραφή: 12 Ιουν 2010, 15:18
Φοιτητής ΗΜΜΥ: Ναι

Re: Τεχνικές Προγραμματισμού - Εργαστήρια [2012-2013]

Δημοσίευσηαπό James » 12 Μαρ 2013, 21:16

Σε αυτό που έχεις γράψει εσύ έχεις:
1) δηλώσει το μετρητή ως count1, παρόλο που η εκφώνηση λέει count.
2) αυξάνεις την τιμή του μέσα στη for αλλά η άσκηση λέει όταν καλείται η power (πρέπει να τη βάλεις έξω από τη for, είτε από πάνω είτε από κάτω).
3) "return(x,count1);" αυτό είναι λάθος, δεν υπάρχει τέτοιο πράγμα. Θα έπρεπε να είναι "return x;"

Η count είναι καθολική μεταβλητή, έχει δηλαδή ισχύ σε όλο το αρχείο. Μπορείς να τη χρησιμοποιήσεις μέσα σε οποιαδήποτε συνάρτηση του συγκεκριμένου αρχείου. Συνεπώς δε χρειάζεται να μεταφέρεις τίποτα, υπάρχει από μόνη της.

ΥΓ. Δεν έχω κοιτάξει τίποτε άλλο εκτός από το 1Ε, έχω θεωρήσει ότι μέχρι το Ε έφτασες επιτυχώς.
(Μόνο) James
Άβαταρ μέλους
James
Διαχειριστής
 
Δημοσιεύσεις: 1740
Εγγραφή: 08 Ιαν 2008, 22:29
Φοιτητής ΗΜΜΥ: Όχι

Re: Τεχνικές Προγραμματισμού - Εργαστήρια [2012-2013]

Δημοσίευσηαπό D.emkas » 12 Μαρ 2013, 23:22

To return(x,y) το είχα διορθωμένο και η count είναι δεσμευμένη γι αυτό δε τη χρησιμοποίησα.Το βασικό λάθος είναι στη diplay π έχω βάλει το return(z) πριν απο την printf :P
D.emkas
Newbie
 
Δημοσιεύσεις: 18
Εγγραφή: 12 Ιουν 2010, 15:18
Φοιτητής ΗΜΜΥ: Ναι

Μέλη σε σύνδεση

Μέλη σε αυτή την Δ. Συζήτηση: Δεν υπάρχουν εγγεγραμμένα μέλη και 4 επισκέπτες