Array



  • hallo, ich habe angefangen mit visuaal c++ zu arbeiten.
    im kurs habe ich eine aufgabe bekommen, was ich leider nicht lösen kann.

    Es soll eine neue Datenstruktur „Mitarbeiter“ mit folgenden Informationen gebildet werden:
    - Personalnummer
    - Name
    - Gehalt im letzten Jahr

    Die Vertreter des Unternehmens werden in einem Array des neuen komplexen Datentyps „Mitarbeiter“ abgespeichert.

    Die Daten sollen von max. 5 Mitarbeiter eingegeben und in einem Array abgespeichert werden.

    Danach soll das Array entsprechend dem Gehalt der Mitarbeiter sortiert werden. Als Sortieralgorithmus kann Bubblesort vwendet werden.

    Das Array „Mitarbeiter“ soll anschließend (sortiert) ausgegeben werden.
    Bilden Sie Unterprogramme für die Eingabe, das Sortieren und die Ausgabe.



  • Denkst du ernsthaft, dass hier jemand deine Hausaufgaben macht?



  • Nymer schrieb:

    Denkst du ernsthaft, dass hier jemand deine Hausaufgaben macht?

    das sind keine hausaufgaben du schlaumeier...
    vom kurs aufgaben zum lernen..

    wenn ich es nicht lösen kann, wäre es ja sinnvoll wenigstens zu sehen wie es geht...



  • anfaengerrr schrieb:

    das sind keine hausaufgaben du schlaumeier...

    Ob nun Hausaufgabe oder normale Aufgabe ist doch gehüpft wie gesprungen.
    Und mit dem Tonfall wirste sicherlich nicht allzuviele Hilfsbereite finden.

    Ein wenig Eigeninitiative wird immer vorrausgesetzt; also wie sieht dein bisheriger code aus?



  • anfaengerrr schrieb:

    schlaumeier

    Danke 🙂

    #include <iostream>
    #include <array>
    #include <algorithm>
    
    class Mitarbeiter{
        private:
        std::string name;
        int nummer,gehalt;
    ...
    };
    
    int main()
    {
        std::array<Mitarbeiter,5> arr;
        std::for_each(arr.begin(),arr.end(),[](Mitarbeiter& m){std::cin>>m;});
        std::sort(arr.begin(),arr.end(),[](const Mitarbeiter& a,const Mitarbeiter& b){return a.g()>b.g();});
        std::for_each(arr.begin(),arr.end(),[](const Mitarbeiter& m){std::cout<<m;});
    }
    

    Den Rest darfst du selber machen. g() liefert den Gehalt.



  • @Nymer
    Warum verschwendest Du Deine Zeit mit Code, den der OP nicht verstehen wird? Das ist hier im Forum eine ätzende Krankheit, totalen Anfängern Code vorzuwerfen, der ihnen nichts bringen wird.



  • Und die beiden for_each mit Lambdas zur Ein- und Ausgabe sind ja hoffentlich ein Witz, oder?



  • Was ist den an dem Code verkehrt? Nymer wollte ihm nicht die Hausaufgaben machen und bekam als Dankeschön den Titel "Schlaumeier". Ich hätte gleich reagiert.

    gruß
    syntax



  • lolalter schrieb:

    @Nymer
    Warum verschwendest Du Deine Zeit mit Code, den der OP nicht verstehen wird? Das ist hier im Forum eine ätzende Krankheit, totalen Anfängern Code vorzuwerfen, der ihnen nichts bringen wird.

    So besser?

    #include <iostream.h>
    #include <stdio.h>
    #include <stdio.h>
    #include <windows.h>
    #include <math.h>
    
    struct MITARBEITER
    {
    	char *name;
    	short nummer;
    	double gehalt;
    };
    
    MITARBEITER *MITARBEITER2;
    int b;
    #define max 5
    MITARBEITER *temp;
    
    void main()
    {
    	MITARBEITER2 = (MITARBEITER *)malloc(sizeof(MITARBEITER2) * max);
    	short i = 0; //eine short deklimition
    	for (short i = 1; i = 5; +i)
    	{
    		gets(MITARBEITER2[i].name);
    		scanf("%s", MITARBEITER2[i].nummer);
    		scanf("%d", MITARBEITER2[i].nummer);
    	}
    	for (int b = 1; b <= 6; i++)
    	{
    		if (MITARBEITER2[b + 1].gehalt < MITARBEITER2[b].gehalt)
    		{
    			temp = MITARBEITER2[b];
    			MITARBEITER2[b + 1] = MITARBEITER2[b];
    			MITARBEITER2[b] = temp;
    		}
    	}
    	for (short i2 = 1; i2 = 5; +i2)
    	{
    		printf("%c", MITARBEITER2[i].name);
    		printf("%c", MITARBEITER2[i].nummer);
    		printf("%c", MITARBEITER2[i].gehalt);
    	}
    	return;
    }
    


  • TyRoXx schrieb:

    So besser?

    Nein, denn es sind viel zu viele Fehler drin.



  • Nee nicht besser.
    Mit Lambda-Ausdrücken muss man einen Anfänger nicht belästigen. Es geht hier um Leute, die gerade lernen was eine Funktion ist und wie man Schleifen und structs verwendet. Deshalb muss man aber auch nichts ins andere Extrem fallen und rotzigen C Code posten.



  • lolalter schrieb:

    Und die beiden for_each mit Lambdas zur Ein- und Ausgabe sind ja hoffentlich ein Witz, oder?

    Wieso Witz? Wie würdest du es den machen? Ich find das gar net so schlecht.



  • out schrieb:

    lolalter schrieb:

    Und die beiden for_each mit Lambdas zur Ein- und Ausgabe sind ja hoffentlich ein Witz, oder?

    Wieso Witz? Wie würdest du es den machen? Ich find das gar net so schlecht.

    Äh, ein wenig übertrieben ist es schon, anstatt bspw. gleich

    for(auto& m : arr)
        std::cin >> m;
    

    zu schreiben.

    Edit: Referenz vergessen.



  • Hacker schrieb:

    nicht nur schöner, sondern auch evt. performanter (aber wie Lambdas geinlined oder optimiert werden, weiß ich nicht).

    So wie alle anderen Funktionen auch.
    Was soll das beim Lesen aus cin für eine Rolle spielen?

    Hacker schrieb:

    for(auto m : arr)
        std::cin >> m;
    

    Und falsch ist es obendrein. Vielleicht ist es deutlicher, wenn du auto selbst durch Mitarbeiter ersetzt.
    Visual C++, ein typischer Einsteiger-Compiler, kann das nicht. Für einen Anfänger sehr verwirrend.



  • TyRoXx schrieb:

    Hacker schrieb:

    for(auto m : arr)
        std::cin >> m;
    

    Und falsch ist es obendrein. Vielleicht ist es deutlicher, wenn du auto selbst durch Mitarbeiter ersetzt.
    Visual C++, ein typischer Einsteiger-Compiler kann das nicht. Für einen Anfänger sehr verwirrend.

    Referenz vergessen 😃
    Visual Studio kann doch echt garnix 👎
    Und was bitte ist an range-based for verwirrend? Nicht nur auf Wikipedia (unter C++11) erklärt, sondern auch vom Kontext her erkenntlich.

    Was es beim Lesen aus cin für eine Rolle spielt? for_each muss die Funktion dann entsprechend oft aufrufen, und ist selbst eine Funktion. Wenn die Lambdas nicht geinlined würden, würde doch wie bei einer normalen Funktion Die Rücksprungadresse und die Parameter auf den Stack gelegt, die Funktion angesprungen, die Parameter würden nach dem Ablauf der Funktion wieder freigegeben und das Programm zum Ausgangspunkt zurückspringen.


  • Mod

    Stream Iteratoren?



  • Woher soll ich denn wissen, was er überhaupt versteht? Dass er das wahrscheinlich nicht versteht war mir relativ klar..
    Ich hätte ihm ja sofort geholfen, wenn er wenigstens einen Ansatz hätte.. Einfach die Aufgabenstellung zu posten klingt doch zu sehr nach Hausaufgaben.

    Ich persönlich find ja meinen Ansatz mit std::for_each schöner, aber das ist wahrscheinlich Ansichtssache, solange ich nicht weiss was schneller ist.



  • Hacker schrieb:

    Und was bitte ist an range-based for verwirrend? Nicht nur auf Wikipedia (unter C++11) erklärt, sondern auch vom Kontext her erkenntlich.

    Ich meide das neue for noch in Beispielen, weil das ein sehr verbreiteter Compiler nicht kann. Ein erfahrener Programmierer weiß das und kennt andere Alternativen, aber ein Anfänger ist mit der kryptischen Fehlermeldung möglicherweise überfordert.

    Hacker schrieb:

    Was es beim Lesen aus cin für eine Rolle spielt? for_each muss die Funktion dann entsprechend oft aufrufen, und ist selbst eine Funktion.

    Du meinst nicht, dass das irrelevant sein könnte, weil beim Lesen aus der Standardeingabe typischerweise zig Funktionen inklusive Syscalls beteiligt sind? Ganz zu schweigen von der Verzögerung beim Eingeben, wenn das mit der Tastatur passiert.



  • Ich hoffe "lolalter" trollt. So dumm sind Menschen - hoffentlich - nicht.



  • TyRoXx schrieb:

    Hacker schrieb:

    Und was bitte ist an range-based for verwirrend? Nicht nur auf Wikipedia (unter C++11) erklärt, sondern auch vom Kontext her erkenntlich.

    Ich meide das neue for noch in Beispielen, weil das ein sehr verbreiteter Compiler nicht kann. Ein erfahrener Programmierer weiß das und kennt andere Alternativen, aber ein Anfänger ist mit der kryptischen Fehlermeldung möglicherweise überfordert.

    Gut. Er kann natürlich auch einfach eine ganz normale Schleife nehmen, und dann später auf C++11-features die VC++ nicht unterstützt zurückgreifen.

    for(int a(0);a < m.size();++a)
        std::cin >> m[a];
    

    Gebastel mit istream_iterator macht dann aber auch keinen Sinn, wenn er ein Anfänger ist 🙄

    Was die Performance angeht: Gut, das ist wohl stark übertrieben.


Anmelden zum Antworten