teo
Πολύ δραστήριο μέλος
 
								 
								


Σημείωση: Το μήνυμα αυτό γράφτηκε 17 χρόνια πριν. Ο συντάκτης του πιθανόν να έχει αλλάξει απόψεις έκτοτε.
Subject to change
e-steki.gr Founder
 
								 
								
Σημείωση: Το μήνυμα αυτό γράφτηκε 17 χρόνια πριν. Ο συντάκτης του πιθανόν να έχει αλλάξει απόψεις έκτοτε.
teo
Πολύ δραστήριο μέλος
 
								 
								Ποια θα ειναι η γενικη μορφη της 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.
Σημείωση: Το μήνυμα αυτό γράφτηκε 17 χρόνια πριν. Ο συντάκτης του πιθανόν να έχει αλλάξει απόψεις έκτοτε.
Subject to change
e-steki.gr Founder
 
								 
								Σημείωση: Το μήνυμα αυτό γράφτηκε 17 χρόνια πριν. Ο συντάκτης του πιθανόν να έχει αλλάξει απόψεις έκτοτε.
teo
Πολύ δραστήριο μέλος
 
								 
								για να το ψαξω λιγακι
Σημείωση: Το μήνυμα αυτό γράφτηκε 17 χρόνια πριν. Ο συντάκτης του πιθανόν να έχει αλλάξει απόψεις έκτοτε.
Γιώργος
Τιμώμενο Μέλος
 
								 
								Θα το δω λίγο τώρα.

Σημείωση: Το μήνυμα αυτό γράφτηκε 17 χρόνια πριν. Ο συντάκτης του πιθανόν να έχει αλλάξει απόψεις έκτοτε.
netharis
Νεοφερμένο μέλος
 
								 
								template <class P>
P foo(P a[])
{
//κώδικας εδώ
return mesos_oros;
}Σημείωση: Το μήνυμα αυτό γράφτηκε 17 χρόνια πριν. Ο συντάκτης του πιθανόν να έχει αλλάξει απόψεις έκτοτε.
Γιώργος
Τιμώμενο Μέλος
 
								 
								Από καθαρή περιέργεια, ο αντίστοιχος κώδικας στη C ποιος θα ήταν; Δηλαδή μία συνάρτηση για όλα;Μπορείς να δηλώσεις τη συνάρτηση με αυτό το τρόπο:
template <class P>
P foo(P a[])
{
//κώδικας εδώ
return mesos_oros;
}
Καλωσήρθες στην παρέα μας.

Σημείωση: Το μήνυμα αυτό γράφτηκε 17 χρόνια πριν. Ο συντάκτης του πιθανόν να έχει αλλάξει απόψεις έκτοτε.
netharis
Νεοφερμένο μέλος
 
								 
								
Σε C δεν υπάρχει τύπος συνάρτησης που είναι ικανός να χειρίζεται, όλους τους τύπους δεδομένων (ουσιαστικά να μετατρέπει).
Υποθέτω μπορείς να το υλοποιήσεις, με ένα κοινό όνομα συνάρτησης, και με κάποια typedef στο τύπο που θές. (κατα πάσα περίπτωση σε preprocessor directive). Γενικά πάντως η C δεν σου παρέχει αυτή την ευκολία.
Σημείωση: Το μήνυμα αυτό γράφτηκε 17 χρόνια πριν. Ο συντάκτης του πιθανόν να έχει αλλάξει απόψεις έκτοτε.
 
								 
								πχ,
void function(void *arg){
    
        int type;  /* o τύπος που θες να μετατρέψεις */
        type= *((int *)arg);    /*μετατροπή του void ορίσματος στο επιθυμητό */
        printf("%d",type);    
}Καλώς ήρθες.

Σημείωση: Το μήνυμα αυτό γράφτηκε 17 χρόνια πριν. Ο συντάκτης του πιθανόν να έχει αλλάξει απόψεις έκτοτε.
 
								 
								Ένα παράδειγμα με templates.
Το template θα φροντίσει για τους τύπους των δεδομένων σου.Οπότε θα χρειαστεί μόνο να ορισεις την αρχικη συνάρτηση.
Το μονο που θα πρέπει να φροντίσεις είναι να ελέγχεις το μήπως των arrays σου.(περνώντας το μήκος ως όρισμα).
Χρόνια πολλά.
Σημείωση: Το μήνυμα αυτό γράφτηκε 17 χρόνια πριν. Ο συντάκτης του πιθανόν να έχει αλλάξει απόψεις έκτοτε.
teo
Πολύ δραστήριο μέλος
 
								 
								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)
Αμα μπορει κανεις να βοηθησει!
Ευχαριστώ!
Σημείωση: Το μήνυμα αυτό γράφτηκε 17 χρόνια πριν. Ο συντάκτης του πιθανόν να έχει αλλάξει απόψεις έκτοτε.
 
								 
								Για να δεις οτι δουλευει σωστα το πρόγραμμα σου βάλε στο πρωτο στοιχείο του πινακα 1.01 και τρεξε το.
Αυτό που μπορεις να κανεις ειναι να μορφοποιείς την έξοδο σου σε ακριβεια δεκαδικών ψηφιων μετα την υποδιαστολη.
Ο κωδικας που το κανει αυτο ειναι :
 std::cout.setf(ios::fixed, ios::floatfield);
  std::cout.setf(ios::showpoint);
  std::cout.precision(2);#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; //Μέσος όρος.
}Σημείωση: Το μήνυμα αυτό γράφτηκε 17 χρόνια πριν. Ο συντάκτης του πιθανόν να έχει αλλάξει απόψεις έκτοτε.
teo
Πολύ δραστήριο μέλος
 
								 
								#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.00 για τον πινακα τυπου double
το προγραμμα αυτο βγαζει ΜΟ=7.00 και για τους δυο πινακες οι οποιοι ο καθενας εχει διαφορετικο τυπο δεδομενων
ΕΥΧΑΡΙΣΤΟ!
Σημείωση: Το μήνυμα αυτό γράφτηκε 17 χρόνια πριν. Ο συντάκτης του πιθανόν να έχει αλλάξει απόψεις έκτοτε.
teo
Πολύ δραστήριο μέλος
 
								 
								
Σημείωση: Το μήνυμα αυτό γράφτηκε 17 χρόνια πριν. Ο συντάκτης του πιθανόν να έχει αλλάξει απόψεις έκτοτε.
 
								 
								Μπορει να σε βοηθήσει αυτό
Σημείωση: Το μήνυμα αυτό γράφτηκε 17 χρόνια πριν. Ο συντάκτης του πιθανόν να έχει αλλάξει απόψεις έκτοτε.
teo
Πολύ δραστήριο μέλος
 
								 
								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()
{
       
      
      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
:clapup::clapup::clapup:
:):):)Σημείωση: Το μήνυμα αυτό γράφτηκε 17 χρόνια πριν. Ο συντάκτης του πιθανόν να έχει αλλάξει απόψεις έκτοτε.
 
								 
								Απο κει και κατω αμα πας να τυπωσεις κατι αλλο θα βγει και αυτο με 2 δεκαδικα ψηφια μετα την υποδιαστολη.Αν χρειαστει να εκτυπωσεις κατι αλλο απο εκει και περα θα χρειαστει να ξανατροποποιησεις την εξοδο.
Σημείωση: Το μήνυμα αυτό γράφτηκε 17 χρόνια πριν. Ο συντάκτης του πιθανόν να έχει αλλάξει απόψεις έκτοτε.
teo
Πολύ δραστήριο μέλος
 
								 
								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)



Σημείωση: Το μήνυμα αυτό γράφτηκε 17 χρόνια πριν. Ο συντάκτης του πιθανόν να έχει αλλάξει απόψεις έκτοτε.
Χρήστες Βρείτε παρόμοια
- 
				 Φορτώνει...
- 
		
		Το forum μας χρησιμοποιεί cookies για να βελτιστοποιήσει την εμπειρία σας.
 Συνεχίζοντας την περιήγησή σας, συναινείτε στη χρήση cookies στον περιηγητή σας.
 Αρχική Forum
 Αρχική Forum
					 Νέα Δημοσίευση
 Νέα Δημοσίευση
					 Προσωπικές Συζητήσεις
 Προσωπικές Συζητήσεις
					 Πολυμέσα - Gallery
 Πολυμέσα - Gallery
						 Συνδεδεμένοι Χρήστες
 Συνδεδεμένοι Χρήστες
					 Λίστα Αποκλεισμένων
 Λίστα Αποκλεισμένων
					 Υπεύθυνοι του Forum
 Υπεύθυνοι του Forum
					 Chat and Fun
 Chat and Fun iSchool
iSchool 
	
	 
 
		 
 
		 
 
		
