Template-funktionen



  • Hallo,
    ich habe hier ein Programm geschrieben, Template-Funktionen.
    aber das Programm funktioniert nicht. 🙄 🙄

    #include <cstdlib> 
    #include<iostream>
    
    using namespace std;
    
    template <typename T> 
    void zahlen_eingeben(T array[], int n) {
        for(int i=0; i<n; ++i) cin>>array[i]; cout<<endl; }
    
    template <typename T>
    void zahlen_generieren(T array[], int n) {
        for(int i=0; i<n; i++) {
            array[i]=rand(); cout<<endl; } 
    }
    template <typename T> 
    void zahlen_ausgeben( T array[],int n) {
        for (int i=0; i<n; ++i) {
            cout<<array[i]<<endl; }
    }
    
    template <typename T>
    void bubble_sort(T array[],int n) {         // bubble_sort
    
     for(int i=1; i <n; i++){
    
       for(int j=0; j<n-1; j++) {
    
        if(array[j]> array[j+1]) {
    
         T tmp = array[j+1]; 
         array[j+1] = array[j]; 
         array[j] = tmp;
        }
       }
     }
    }
    
    template <typename T>
    void insertion_sort( T array[],int n) {       //insertion_sort
    
     for (int i=1; i <n; i++) {  
    
     T tmp=array[i]; 
     int j = i-1; 
     while (j>=0 && tmp<array[j]) {
         array[j+1] = array[j]; j--; }
     array[j+1] = tmp; 
     }
    }
    
    template <typename T> 
    void selection_sort( T array[],int n){      //selection_sort
    
     for (int i=0; i <n-1; i++) { 
    
     int k=i; // Index kleinstes Element T
    int min = array[i]; // kleinstes Element
     for (int j=i+1; j<n; j++) { // suche kleinstes Element
    
      if (array[j] < min) {
          k = j; min = array[j]; 
      }
     } 
     array[k] = array[i]; // vertausche aktuelles Element mit kleinstem Element
     array[i] = min; 
     }
    }
    
    template <typename T> 
    void binary_insertion_sort ( T array[], int n/* the size of array */) {  //binary_insertion_sort
        int j,i;
        for ( i = 0; i < n; i++) { 
            T temp = array[i];
            int low = 0, high = i,k;
            while (high>low) {
                int mid = (high + low) / 2;
    
    if ( temp <= array[mid]) high = mid;
    else low = mid+1; }
            for (k = i; k > high; k--)
                array[k] = array[k - 1]; 
            array[high] = temp; 
        }
    }
    
    int main(){
        int number; 
        int a; 
        int k[];
        do {
    
                cout<<"(1)Zahlen per Hand eingeben"<<endl;
                cout<<"(2) Zahlen generieren lassen"<<endl; 
                cout<<"(3)Zahlen ausgeben"<<endl; 
                cout<<"(4) Bubble Sort"<<endl;
                cout<<"(5) Insertion Sort"<<endl;
                cout<<"(6) Selection Sort"<<endl;
                cout<<"(7) Binary Insertion Sort"<<endl;
                cout<<"(0) Ende"<<endl;
                cin>>number;
                switch(number) { 
                    case 1: { 
                        cout<<"wie viel zahlen :\n"<<endl; 
                        cin>>k; 
                        cout<<endl; 
                        zahlen_eingeben(a,k); 
                        break; 
                    } 
                    case 2: { 
                        cout<<"wie viel zahlen :\n"<<endl; 
                        cin>>k; 
                        cout<<endl;
                        zahlen_generieren(a,k);
                        break; 
                    } 
                    case 3: { 
                        cout<<endl;
                        zahlen_ausgeben(a,k); 
                        break;
                    }
                    case 4: { 
                        bubble_sort(a,k);
                        break; 
                    }
                    case 5: {
                        insertion_sort(a,k);
                        break;
                    }
                    case 6: {
                        selection_sort(a,k);
                        break;
                    }
                    case 7: {
                        binary_insertion_sort (a,k);
                        break;
                    }
                    case 0: return 0;
                }
        }
        while( number<8);
    }
    


  • kadour schrieb:

    aber das Programm funktioniert nicht. 🙄 🙄

    Haste Nasendämonen? Oder wie äußert sich das? Meckert der Comiler, der Linker, das Laufzeitsystem? Und wie sieht die Mecker aus?



  • hatte nun keine lust den ganzen code im detail anzuschauen. nur zwei dinge auf die kürze:
    1.

    int k[];
    

    dass das nicht geht ist logisch. wie gross soll das array denn sein?
    2. wenn du schon mit templates arbeitest dann kannst du doch gleich das iterator-pattern verwenden. ist viel besser als das was du hier machst.


  • Mod

    dass das nicht geht ist logisch.

    Das ist erlaubt, seit C++14.



  • Arcoth schrieb:

    dass das nicht geht ist logisch.

    Das ist erlaubt, seit C++14.

    kann man das denn schon so definitiv sagen? es ist doch bestimmt nur in einem wd vorgeschlagen worden, nicht jedoch fix im standard verankert. und hast du dazu zufällig ein paper oder so zur hand? es nimmt mich schon wunder was das bedeutet etc. und ich hab bedauerlicherweise auf die schnelle nichts entsprechendes gefunden.


Anmelden zum Antworten