Elemente vertauschen



  • Hallo !

    Ich möchte in meinem Programm gerne zwei Adressen vertauschen und bekommen das einfach nicht hin. Wäre cool, wenn einer helfen könnte. Ich habe die entsprechende Stelle fett markiert. Die Aufgabe war ein programm zu schreiben, dass den Inhalt von einem double Array auftseigend sortiert. In der Funktion sort soll es eine Funktion maximum geben, die die Adresse des größten Elements ermittelt.

    Hier mal das Programm:

    #include <iostream>
    #include <cstdlib> 
    #include <ctime> 
    
    int input;
    char inputchar;
    
    double* maximum (double* arraymaximum,int inputmaximum) 
    {
    	double* arraygreatest;
    	arraygreatest=new double[1];
    	double* arraycompare1=arraymaximum;
    	arraycompare1=new double[1];	
    	double* arraycompare2;
    	arraycompare2=new double[1];
    	for (int i=0;i<inputmaximum;i++) //find out the adress of the greatest numerical value
    	{
    		arraycompare2=arraymaximum+i;
    		if (*arraycompare1>*arraycompare2) arraygreatest=arraycompare1;
    		else arraygreatest=arraycompare2; 
    		arraycompare1=arraygreatest;
    	}
    	return arraygreatest; //give adress of the greatest numerical value to function sort
    }
    
    double* sort (double* arraysort,int inputsort) 
    {
    	double* arrayback;
    	arrayback=new double[1];
    	double* bla;
    	bla=new double[1];
    	double* blub;
    	blub=new double[1];
    	double*beng;
    	beng=new double[1];
    
    	for (int i=0;i<inputsort;i++)
    	{
    		int inputsortdekrement=inputsort-i;
    		double* arraygreatest=maximum(arraysort,inputsortdekrement); //call function maximum
    		//an dieser Stelle soll die Adresse von dem größten Wert und die letzte Adresse von dem 
    		//Array vertauscht werden
    	}
    	arrayback=arraysort+(input-1);
    	return arrayback;
    }
    
    void main() 
    { 
    	bool boolean;
    	boolean=true;
    	for (;boolean==true;) 
    	{
    		std::cout<<"Eingabe: "; //input value of array
    		std::cin>>input;
    		srand((unsigned)time(0)); 
    		double* array;
    		array=new double(input+1);
    		for (int i=0;i<input;i++) //put random numerical values in array
    		{
    			*array=rand();
    			std::cout<<*array<<" ";
    			array++;
    		}
    		array=array-input; //set back adress
    		double* arrayback=sort(array,input); //call function sort
    		for(int j=1;j<=input;j++) { std::cout<<std::endl<<j<<".Zahl: "<<*arrayback; arrayback--; }
    		std::cout<<std::endl<<"Wollen Sie noch einmal: ";
    		std::cin>>inputchar;
    		if (inputchar=='j') boolean=true;
    		else boolean=false;
    	}
    }
    

    LG Boese



  • Es ist nicht nötig, Speicher zu reservieren, ohne ihn zu benutzen. Du forderst mit new Speicher an, merkst dir die Adresse, aber dann überschreibst du die Adresse mit einer Elementadresse eines Arrays, so dass du den dynamisch reservierten Speicher noch nichtmal mehr freigeben kannst. Außerdem sollte man auch Variablennamen benutzen, die etwas ausagekräftiger sind. Deine maximum Funktion z. Bsp. müsste also ungefähr so aussehen:

    //find out the adress of the greatest numerical value
    double *maximum(double *values, int count)
    {
        double *result = values;
        double *current;
        for (int i = 1; i < count; ++i)
        {
            current = values + i;
            if (*current > *result)
                result = current;
        }
        return result;
    }
    

Anmelden zum Antworten