×
Επεξεργασία Προφίλ Επεξεργασία Avatar Επεξεργασία Υπογραφής Επεξεργασία Επιλογών E-mail και Κωδικός
×
Αποσύνδεση Οι Συνδρομές μου Το Προφίλ μου Τα Posts μου Τα Threads μου Λίστα Επαφών Αόρατος Χρήστης
Τι;
Πως;
Ταξινόμηση
Που;
Σε συγκεκριμένη κατηγορία;
Ποιος;
Αποτελέσματα Αναζήτησης
Συμπληρώστε τουλάχιστον το πεδίο Τι;

Το e-steki είναι μια από τις μεγαλύτερες ελληνικές διαδικτυακές κοινότητες με 67,032 μέλη και 2,416,504 μηνύματα σε 75,355 θέματα. Αυτή τη στιγμή μαζί με εσάς απολαμβάνουν το e-steki άλλα 316 άτομα.

Καλώς ήρθατε στο e-steki!

Εγγραφή Βοήθεια

Βοήθεια σε ασκηση C++ (template functions)

teo (Θοδωρής)

Δραστήριο Μέλος

Ο Θοδωρής αυτή τη στιγμή δεν είναι συνδεδεμένος Επαγγέλεται Φοιτητής/τρια . Έχει γράψει 426 μηνύματα.

O teo έγραψε: στις 18:23, 26-12-07:

#1
Έστω οτι θέλω να φτιάξω μια template function που θα υπολογίζει το μέσο όρο των περιεχομένων ενός πίνακα. Η συνάρτηση θα πρέπει να υποστηρίζει μεταβλητές τύπου int, long, double και char.

0 Δεν μπορείτε να αξιολογήσετε αρνητικά το μήνυμα αυτόΔεν μπορείτε να αξιολογήσετε θετικά το μήνυμα αυτό
Παράθεση

Subject to change (Λία)

Founder

H Λία αυτή τη στιγμή δεν είναι συνδεδεμένη. Επαγγέλεται Web developer . Έχει γράψει 9,465 μηνύματα.

H Subject to change έγραψε: στις 18:32, 26-12-07:

#2
Θα βοηθούσε περισσότερο αν μας έλεγες που ακριβώς δυσκολεύεσαι
0 Δεν μπορείτε να αξιολογήσετε αρνητικά το μήνυμα αυτόΔεν μπορείτε να αξιολογήσετε θετικά το μήνυμα αυτό
Παράθεση

teo (Θοδωρής)

Δραστήριο Μέλος

Ο Θοδωρής αυτή τη στιγμή δεν είναι συνδεδεμένος Επαγγέλεται Φοιτητής/τρια . Έχει γράψει 426 μηνύματα.

O teo έγραψε: στις 20:07, 26-12-07:

#3
Γεια σου και χρονια πολλα!

Ποια θα ειναι η γενικη μορφη της function template(γενικη συναρτηση που μπορει να υποστηριζει πολλους τυπους δεδομενων.)

Εχω μπερδευτει λιγο γι΄αυτο αμα μπορεις να βοηθησεις!

π.χ εστω οτι θελω να υπολογισω τον Μ.Ο για τους παρακατω τεσσερις πινακες:

char chrArr[]={1,3,5,9,11,13};

int intArr[]={1,3,5,9,11,13};

long lonArr[]={1L,3L,5L,9L,11L,13L};

double dubArr[]={1.0,3.0,5.0,9.0,11.0,13.0};

Αυτη η γενικη συναρτηση(function template) θα πρεπει να υπολογιζει τον Μ.Ο για τις παραπανω περιπτωσεις.

Δηλ. αντι να γραψω τεσσερις διαφορετικες συναρτησεις(μια για καθε τυπο δεδομενων) θελω να γραψω μια γενικη συναρτηση(function template) που θα υπολογιζει το μεσο ορο των περιεχομενων ενος πινακα. Αρα η συναρτηση(function template) θα πρεπει να υποστηριζει μεταβλητες τυπου int ,long,double και char.
edited Τελευταία επεξεργασία από το χρήστη teo : 26-12-07 στις 20:20.
0 Δεν μπορείτε να αξιολογήσετε αρνητικά το μήνυμα αυτόΔεν μπορείτε να αξιολογήσετε θετικά το μήνυμα αυτό
Παράθεση

Subject to change (Λία)

Founder

H Λία αυτή τη στιγμή δεν είναι συνδεδεμένη. Επαγγέλεται Web developer . Έχει γράψει 9,465 μηνύματα.

H Subject to change έγραψε: στις 20:12, 26-12-07:

#4
Δεν θυμάμαι σχεδόν καθόλου C++ (έχουν περάσει 2 χρόνια απο τότε που την έκανα στο πανεπιστήμιο), στη Java αυτό (αν κατάλαβα δλδ καλά τι θες να κάνεις) γίνεται με "υπερφόρτωση", δηλαδή γράφεις πολλές συναρτήσεις, με το ίδιο όνομα και διαφορετικό τύπο επιστροφής τιμής. Μήπως παίζει κάτι τέτοιο και στη C++?
0 Δεν μπορείτε να αξιολογήσετε αρνητικά το μήνυμα αυτόΔεν μπορείτε να αξιολογήσετε θετικά το μήνυμα αυτό
Παράθεση

teo (Θοδωρής)

Δραστήριο Μέλος

Ο Θοδωρής αυτή τη στιγμή δεν είναι συνδεδεμένος Επαγγέλεται Φοιτητής/τρια . Έχει γράψει 426 μηνύματα.

O teo έγραψε: στις 20:21, 26-12-07:

#5
τα λεμε αργοτερα!
για να το ψαξω λιγακι
0 Δεν μπορείτε να αξιολογήσετε αρνητικά το μήνυμα αυτόΔεν μπορείτε να αξιολογήσετε θετικά το μήνυμα αυτό
Παράθεση

Γιώργος

Τιμώμενο Μέλος

Ο Γιώργος αυτή τη στιγμή δεν είναι συνδεδεμένος Μας γράφει απο Ελβετία (Ευρώπη). Έχει γράψει 8,956 μηνύματα.

O Γιώργος Hunt or be Hunted. έγραψε: στις 21:14, 26-12-07:

#6
Αν βάλεις τη συνάρτηση τύπου void; (σόρρυ, εγώ C ξέρω κάτι ψιλά, αλλά ίσως βοηθήσει)


Θα το δω λίγο τώρα.
0 Δεν μπορείτε να αξιολογήσετε αρνητικά το μήνυμα αυτόΔεν μπορείτε να αξιολογήσετε θετικά το μήνυμα αυτό
Παράθεση

netharis (Χάρης)

Νεοφερμένος

Ο Χάρης αυτή τη στιγμή δεν είναι συνδεδεμένος Είναι 28 ετών και επαγγέλεται Φοιτητής/τρια . Έχει γράψει 2 μηνύματα.

O netharis έγραψε: στις 21:23, 26-12-07:

#7
Μπορείς να δηλώσεις τη συνάρτηση με αυτό το τρόπο:
template <class P> P foo(P a[]) { //κώδικας εδώ return mesos_oros; }
edited Τελευταία επεξεργασία από το χρήστη netharis : 26-12-07 στις 21:35.
0 Δεν μπορείτε να αξιολογήσετε αρνητικά το μήνυμα αυτόΔεν μπορείτε να αξιολογήσετε θετικά το μήνυμα αυτό
Παράθεση

Γιώργος

Τιμώμενο Μέλος

Ο Γιώργος αυτή τη στιγμή δεν είναι συνδεδεμένος Μας γράφει απο Ελβετία (Ευρώπη). Έχει γράψει 8,956 μηνύματα.

O Γιώργος Hunt or be Hunted. έγραψε: στις 21:28, 26-12-07:

#8
Αρχική Δημοσίευση από netharis
Μπορείς να δηλώσεις τη συνάρτηση με αυτό το τρόπο:
template <class P>
P foo(P a[])
{
//κώδικας εδώ
return mesos_oros;
}
Από καθαρή περιέργεια, ο αντίστοιχος κώδικας στη C ποιος θα ήταν; Δηλαδή μία συνάρτηση για όλα;



Καλωσήρθες στην παρέα μας.
0 Δεν μπορείτε να αξιολογήσετε αρνητικά το μήνυμα αυτόΔεν μπορείτε να αξιολογήσετε θετικά το μήνυμα αυτό
Παράθεση

netharis (Χάρης)

Νεοφερμένος

Ο Χάρης αυτή τη στιγμή δεν είναι συνδεδεμένος Είναι 28 ετών και επαγγέλεται Φοιτητής/τρια . Έχει γράψει 2 μηνύματα.

O netharis έγραψε: στις 22:00, 26-12-07:

#9
Καλώς σας βρήκα

Σε C δεν υπάρχει τύπος συνάρτησης που είναι ικανός να χειρίζεται, όλους τους τύπους δεδομένων (ουσιαστικά να μετατρέπει).
Υποθέτω μπορείς να το υλοποιήσεις, με ένα κοινό όνομα συνάρτησης, και με κάποια typedef στο τύπο που θές. (κατα πάσα περίπτωση σε preprocessor directive). Γενικά πάντως η C δεν σου παρέχει αυτή την ευκολία.
0 Δεν μπορείτε να αξιολογήσετε αρνητικά το μήνυμα αυτόΔεν μπορείτε να αξιολογήσετε θετικά το μήνυμα αυτό
Παράθεση

Bill

Διακεκριμένο μέλος

Ο Bill αυτή τη στιγμή δεν είναι συνδεδεμένος Έχει γράψει 2,195 μηνύματα.

O Bill έγραψε: στις 23:13, 26-12-07:

#10
Αυτό μπορείς να το πετύχεις έμμεσα περνώντας ορίσματα τύπου void* ,ώστε να τα μετατρέπεις μέσα στη συνάρτηση.
πχ,
void function(void *arg){ int type; /* o τύπος που θες να μετατρέψεις */ type= *((int *)arg); /*μετατροπή του void ορίσματος στο επιθυμητό */ printf("%d",type); } Απλά,όπως λες, θα πρέπει να βρεις ένα τρόπο ώστε να ξέρεις τί ορισμα θα χρησιμοποιήσεις.

Καλώς ήρθες.
0 Δεν μπορείτε να αξιολογήσετε αρνητικά το μήνυμα αυτόΔεν μπορείτε να αξιολογήσετε θετικά το μήνυμα αυτό
Παράθεση

Bill

Διακεκριμένο μέλος

Ο Bill αυτή τη στιγμή δεν είναι συνδεδεμένος Έχει γράψει 2,195 μηνύματα.

O Bill έγραψε: στις 23:24, 26-12-07:

#11
Ένα παράδειγμα με templates.
Το template θα φροντίσει για τους τύπους των δεδομένων σου.Οπότε θα χρειαστεί μόνο να ορισεις την αρχικη συνάρτηση.
Το μονο που θα πρέπει να φροντίσεις είναι να ελέγχεις το μήπως των arrays σου.(περνώντας το μήκος ως όρισμα).

Χρόνια πολλά.
0 Δεν μπορείτε να αξιολογήσετε αρνητικά το μήνυμα αυτόΔεν μπορείτε να αξιολογήσετε θετικά το μήνυμα αυτό
Παράθεση

teo (Θοδωρής)

Δραστήριο Μέλος

Ο Θοδωρής αυτή τη στιγμή δεν είναι συνδεδεμένος Επαγγέλεται Φοιτητής/τρια . Έχει γράψει 426 μηνύματα.

O teo έγραψε: στις 16:39, 27-12-07:

#12
#include<iostream>
using namespace std;

template<class atype,class btype>
btype mesos_oros(atype* array, btype size)
{
btype sum=0; //βοηθητική μεταβλητή.
for(btype j=0;j<size;j++)
sum=sum+array[j];
return(sum/size); //Μέσος όρος.
}

int intArr[]={1,3,5,9,11,13};

double dubArr[]={1.0,3.0,5.0,9.0,11.0,13.0};

int main()
{


cout<<"\n MO= "<<mesos_oros<int>(intArr,6);

cout<<"\n MO= "<<mesos_oros<double>(dubArr,6);

return 0;
}


Εξοδος προγραμματος:

ΜΟ= 7
ΜΟ= 7(εδω κανονικα θα επρεπε να μου δωσει 7.0, δεν γινεται σωστα η μετατροπει απο int σε double)

Αμα μπορει κανεις να βοηθησει!

Ευχαριστώ!
edited Τελευταία επεξεργασία από το χρήστη teo : 28-12-07 στις 09:56.
0 Δεν μπορείτε να αξιολογήσετε αρνητικά το μήνυμα αυτόΔεν μπορείτε να αξιολογήσετε θετικά το μήνυμα αυτό
Παράθεση

Bill

Διακεκριμένο μέλος

Ο Bill αυτή τη στιγμή δεν είναι συνδεδεμένος Έχει γράψει 2,195 μηνύματα.

O Bill έγραψε: στις 14:12, 28-12-07:

#13
Φταίει οτι δεν μορφωποιείς την έξοδο σου.Επειδή στα αποτελέσματα σου τα ψηφία μετα την υποδιαστολή ειναι 0 δεν εκτυπώνονται στην έξοδο.
Για να δεις οτι δουλευει σωστα το πρόγραμμα σου βάλε στο πρωτο στοιχείο του πινακα 1.01 και τρεξε το.

Αυτό που μπορεις να κανεις ειναι να μορφοποιείς την έξοδο σου σε ακριβεια δεκαδικών ψηφιων μετα την υποδιαστολη.
Ο κωδικας που το κανει αυτο ειναι :

std::cout.setf(ios::fixed, ios::floatfield); std::cout.setf(ios::showpoint); std::cout.precision(2); Oποτε μετα ,το προγραμμα σου τρεχει κανονικα.
#include<iostream> using namespace std; template<class atype,class btype> float mesos_oros(atype* array, btype size) { float sum=0.0; //βοηθητική μεταβλητή. for(int j=0;j<size;j++) sum+=array[j]; return sum/size; //Μέσος όρος. }
0 Δεν μπορείτε να αξιολογήσετε αρνητικά το μήνυμα αυτόΔεν μπορείτε να αξιολογήσετε θετικά το μήνυμα αυτό
Παράθεση

teo (Θοδωρής)

Δραστήριο Μέλος

Ο Θοδωρής αυτή τη στιγμή δεν είναι συνδεδεμένος Επαγγέλεται Φοιτητής/τρια . Έχει γράψει 426 μηνύματα.

O teo έγραψε: στις 15:49, 28-12-07:

#14
#include<iostream> using namespace std; template<class atype,class btype> float mesos_oros(atype* array, btype size) { float sum=0.0; //βοηθητική μεταβλητή. for(int j=0;j<size;j++) sum=sum+array[j]; return(sum/size); //μέσος όρος. } int intArr[]={1,3,5,9,11,13}; double dubArr[]={1.0,3.0,5.0,9.0,11.0,13.0}; int main() { std::cout.setf(ios::fixed, ios::floatfield); std::cout.setf(ios::showpoint); std::cout.precision(2); cout<<"\n MO= "<<mesos_oros<int>(intArr,6); cout<<"\n MO= "<<mesos_oros<double>(dubArr,6); return 0; } Εγω θελω στην εξοδο να μου βγαζει ΜΟ= 7 (μεσος ορος για τον πινακα ο οποιος εχει ακεραιους αριθμους)

Και ΜΟ=7.00 για τον πινακα τυπου double

το προγραμμα αυτο βγαζει ΜΟ=7.00 και για τους δυο πινακες οι οποιοι ο καθενας εχει διαφορετικο τυπο δεδομενων

ΕΥΧΑΡΙΣΤΟ!
edited Τελευταία επεξεργασία από το χρήστη teo : 28-12-07 στις 15:55. Αιτία: Προσθήκη [code][/code] tags
0 Δεν μπορείτε να αξιολογήσετε αρνητικά το μήνυμα αυτόΔεν μπορείτε να αξιολογήσετε θετικά το μήνυμα αυτό
Παράθεση

teo (Θοδωρής)

Δραστήριο Μέλος

Ο Θοδωρής αυτή τη στιγμή δεν είναι συνδεδεμένος Επαγγέλεται Φοιτητής/τρια . Έχει γράψει 426 μηνύματα.

O teo έγραψε: στις 16:01, 28-12-07:

#15
μπορει να γινει τιποτα για να λυσω το προβλημα;
0 Δεν μπορείτε να αξιολογήσετε αρνητικά το μήνυμα αυτόΔεν μπορείτε να αξιολογήσετε θετικά το μήνυμα αυτό
Παράθεση

Bill

Διακεκριμένο μέλος

Ο Bill αυτή τη στιγμή δεν είναι συνδεδεμένος Έχει γράψει 2,195 μηνύματα.

O Bill έγραψε: στις 16:02, 28-12-07:

#16
Για το int array δεν χρειαζεται να εκτυπωσεις αποτέλεσμα με δεκαδικά ψηφία.Εσενα εκτυπώνονται επειδη εχεις βαλει το κομματι κωδικα πριν απο ολα.Μπορεις να τροποποιεις την εξοδο μονο οπου χρειαζεται.
Μπορει να σε βοηθήσει αυτό
0 Δεν μπορείτε να αξιολογήσετε αρνητικά το μήνυμα αυτόΔεν μπορείτε να αξιολογήσετε θετικά το μήνυμα αυτό
Παράθεση

teo (Θοδωρής)

Δραστήριο Μέλος

Ο Θοδωρής αυτή τη στιγμή δεν είναι συνδεδεμένος Επαγγέλεται Φοιτητής/τρια . Έχει γράψει 426 μηνύματα.

O teo έγραψε: στις 16:09, 28-12-07:

#17
#include<iostream>
using namespace std;


template<class atype,class btype>
float mesos_oros(atype* array, btype size)
{
float sum=0.0; //βοηθητική μεταβλητή.
for(int j=0;j<size;j++)
sum=sum+array[j];
return(sum/size); //μέσος όρος.
}

int intArr[]={1,3,5,9,11,13};

[code]double dubArr[]={1.0,3.0,5.0,9.0,11.0,13.0};

int main()
{



cout<<"\n MO= "<<mesos_oros<int>(intArr,6);

std::cout.setf(ios::fixed, ios::floatfield);
std::cout.setf(ios::showpoint);
std::cout.precision(2);

cout<<"\n MO= "<<mesos_oros<double>(dubArr,6);

return 0;
}
ολα οκ ευχαριστω πολυ!

εξοδος προγραμματος:
ΜΟ= 7
ΜΟ= 7.00


edited Τελευταία επεξεργασία από το χρήστη teo : 28-12-07 στις 16:17. Αιτία: Προσθήκη [code][/code] tags
0 Δεν μπορείτε να αξιολογήσετε αρνητικά το μήνυμα αυτόΔεν μπορείτε να αξιολογήσετε θετικά το μήνυμα αυτό
Παράθεση

Bill

Διακεκριμένο μέλος

Ο Bill αυτή τη στιγμή δεν είναι συνδεδεμένος Έχει γράψει 2,195 μηνύματα.

O Bill έγραψε: στις 16:15, 28-12-07:

#18
Να σαι καλα.
Απο κει και κατω αμα πας να τυπωσεις κατι αλλο θα βγει και αυτο με 2 δεκαδικα ψηφια μετα την υποδιαστολη.Αν χρειαστει να εκτυπωσεις κατι αλλο απο εκει και περα θα χρειαστει να ξανατροποποιησεις την εξοδο.
0 Δεν μπορείτε να αξιολογήσετε αρνητικά το μήνυμα αυτόΔεν μπορείτε να αξιολογήσετε θετικά το μήνυμα αυτό
Παράθεση

teo (Θοδωρής)

Δραστήριο Μέλος

Ο Θοδωρής αυτή τη στιγμή δεν είναι συνδεδεμένος Επαγγέλεται Φοιτητής/τρια . Έχει γράψει 426 μηνύματα.

O teo έγραψε: στις 18:00, 28-12-07:

#19
#include<iostream>
using namespace std;


template<class atype,class btype>
float mesos_oros(atype* array, btype size)
{
float sum=0.0; //βοηθητική μεταβλητή
for(int j=0;j<size;j++)
sum=sum+array[j];
return(sum/size); //μέσος όρος
}

int intArr[]={1,3,5,9,11,13};

double dubArr[]={1.0,3.0,5.0,9.0,11.0,13.0};

long lonArr[]={1L,3L,5L,9L,11L,13L};

char chrArr[]={1,3,5,9,11,13};

int main()
{



cout<<"\n MO= "<<mesos_oros<int>(intArr,6);

cout<<"\n MO= "<<mesos_oros<long>(lonArr,6);

cout<<"\n MO= "<<mesos_oros<char>(chrArr,6);

std::cout.setf(ios::fixed, ios::floatfield);
std::cout.setf(ios::showpoint);
std::cout.precision(2);

cout<<"\n MO= "<<mesos_oros<double>(dubArr,6);

return 0;
}




εξοδος:



ΜΟ= 7 (Integer)
MO= 7 (long)
MO=7 (char)
MO=7.00 (double)



0 Δεν μπορείτε να αξιολογήσετε αρνητικά το μήνυμα αυτόΔεν μπορείτε να αξιολογήσετε θετικά το μήνυμα αυτό
Παράθεση
Απάντηση στο θέμα

Χρήστες

  • Τα παρακάτω 0 μέλη και 1 επισκέπτες διαβάζουν μαζί με εσάς αυτό το θέμα.
     
  • (View-All Tα παρακάτω 0 μέλη διάβασαν αυτό το θέμα τις τελευταίες 30 μέρες:
    Μέχρι και αυτή την στιγμή δεν έχει δει το θέμα κάποιο ορατό μέλος

Βρείτε παρόμοια