Lagerverwaltung /Struktur



  • Nyoko schrieb:

    Ich kann machen was ich will.
    Ich krieg es nicht hin, das die Kisten hochgezaehlt werden.-.-

    Auch das setzen auf 0 bringt nichts.
    Oder mach ich da was falsch?

    @S23
    Danke, aber das hilft leider auch nicht.

    Mehrmalige Kontrolle und umschreibungen..

    PS:GL bei deiner Aufgabe:)
    Viell. bekommst du es ja besser hin als ich.

    Edit:
    Ich hab es endlich hinbekommen.
    Fragt nicht wie-.-
    Faengt zwar ab 2 an aber wenigstens zaehlt er^^

    Schau dir das mal an

    [code]
    

    [/code]

    Gruß Heinerich



  • Huhu, ich glaube du hast da einen Kopierfehler:)^^



  • Nyoko schrieb:

    Huhu, ich glaube du hast da einen Kopierfehler:)^^

    Genau das ist euer Problem, ihr kopiert alles.
    Alles zusammen kopiert und nix verstanden.
    Und wenn der Dozent fragt, wie was funktioniert, dann klotzt ihr doch sowieso nur an die Decke.
    Aber wir sind die Programmierer schlecht hin.
    Meine Fresse mir wird übel.
    So eine billige Schulaufgabe füllt schon 4 Seiten, lächerlich.
    Aber Copy & Paste sind die Befehle die ihr aus dem FF beherrscht.
    Keine Gedanken machen, nicht nach den Wieso und Warum fragen.
    Hauptsache ich gehe mit einer 1 nach Hause.
    C++ ist nicht nur Copy & Paste



  • Ich mein aber auch das wenn man die 4.te nicht hinbekommt bekommt man ab heft 6 feuchte augen. Im prinzip ist es doch ganz einfach, man muss ja nicht schauen wo die kiste passt sondern nur die gesamtwerte abfragen. Die Struktur auslesen, alle längen zusammenzählen und dann abfragen ist 1 grösser als was noch offen ist?!?
    wenn nicht dann rein damit...



  • Copy & Paste schrieb:

    Nyoko schrieb:

    Huhu, ich glaube du hast da einen Kopierfehler:)^^

    Genau das ist euer Problem, ihr kopiert alles.
    Alles zusammen kopiert und nix verstanden.
    Und wenn der Dozent fragt, wie was funktioniert, dann klotzt ihr doch sowieso nur an die Decke.
    Aber wir sind die Programmierer schlecht hin.
    Meine Fresse mir wird übel.
    So eine billige Schulaufgabe füllt schon 4 Seiten, lächerlich.
    Aber Copy & Paste sind die Befehle die ihr aus dem FF beherrscht.
    Keine Gedanken machen, nicht nach den Wieso und Warum fragen.
    Hauptsache ich gehe mit einer 1 nach Hause.
    C++ ist nicht nur Copy & Paste

    Sry aber da kann dir übel werden wies dir steht, aber
    ich habe nie Codes verlangt, nur einen Rat.
    Ich sitze jetzt seit 3 Wochen an der Aufgabe und
    versuche es zu verstehen.
    Aber mit solch sinnvollen Beiträgen komme ich auch nicht weiter.
    Und das ist auch keine billige Schulaufgabe.
    Da bin ich schon lange raus^^
    Und ich kann mich auch nur nach dem Heft richten bzw
    nach dem Lernstoff der mir zur Verfügung steht.
    Und noch ein Problem ist, das einem nur begrenzt Zeit
    zur verfügung steht.
    _____

    Danke denjo, genau sowas versteh ich unter Hilfestellung.:)



  • So, Aufgabe erledigt.
    Ich muss mir den Code noch mehrmals anschauen
    um zu Wissen wieso das auf einmal funktioniert.
    (Ich hab den Code neu geschrieben und eine while
    Schleife benutzt, wobei ich das das erste Mal auch
    schon tat...na ich werd noch drauf kommen).

    Danke für alle die sich die Mühe gemacht haben mir
    zu antworten.



  • hallo zusammen, habe auch diese aufgabe und habe schon mal angefangen. irgendwie komm ich jedoch mal wieder nicht weiter (hätt mich auch gewundert, wenn schon). Woll liegt den mein Fehler ?
    mein Listing:

    #include "stdafx.h"

    using namespace System;

    struct kiste {
    Int32 breite;
    Int32 laenge;
    Int32 hoehe;
    };

    //Kisteneingabe
    kiste eingabe(Int32 nr) {
    kiste akiste;

    Console::WriteLine("Geben Sie eine Breite für die Kiste ein:");
    akiste.breite=Convert::ToInt32(Console::ReadLine());

    Console::WriteLine("Geben Sie eine Länge für die Kiste ein:");
    akiste.laenge=Convert::ToInt32(Console::ReadLine());

    Console::WriteLine("Geben Sie eine Höhe für die Kiste ein:");
    akiste.hoehe=Convert::ToInt32(Console::ReadLine());
    Console::WriteLine();
    return akiste;
    }
    //volumenberechnung
    Int32 volumenrechnung(kiste akiste) {
    Int32 vol;
    vol=akiste.breite * akiste.laenge * akiste.hoehe;
    return vol;
    }

    //Kistenanzeige
    void anzeigen(kiste lager[]) {
    Int32 nummer;
    Console::WriteLine("Welche Kiste wollen Sie anzeigen ?");
    nummer=Convert::ToInt32(Console::ReadLine());
    }

    //Kiste löschen

    void loeschen(kiste lager[]) {
    Int32 nummer;

    Console::WriteLine("Welche Kiste wollen Sie löschen ?");
    nummer=Convert::ToInt32(Console::ReadLine());
    lager[nummer].breite=0;
    lager[nummer].hoehe=0;
    lager[nummer].laenge=0;
    }
    //Kiste ändern

    void aendern(kiste lager[]) {
    Int32 nummer;

    Console::WriteLine("Welche Kiste wollen Sie ändern ?");
    nummer=Convert::ToInt32(Console::ReadLine());

    Console::WriteLine("Geben sie bitte die Höhe der Kiste ein");
    lager[nummer].hoehe = Convert::ToInt32(Console::ReadLine());

    Console::WriteLine("Geben sie bitte die Breite der Kiste ein");
    lager[nummer].breite = Convert::ToInt32(Console::ReadLine());

    Console::WriteLine("Geben sie bitte die Länge der Kiste ein");
    lager[nummer].laenge = Convert::ToInt32(Console::ReadLine());
    }

    //Auflisten

    void listen(kiste lager[]) {
    for (Int32 schleife=0;schleife<100;schleife++)
    Console::WriteLine("alle Kisten: {0}",lager[schleife]);
    }

    int main(array<System::String ^> ^args)
    {

    kiste lager[100];
    Int32 auswahl;

    Console::WriteLine("Treffen Sie bitte eine Auswahl:");
    Console::WriteLine("1 - Eingabe einer neuen Kiste");
    Console::WriteLine("2 - Löschen der Daten einer Kiste");
    Console::WriteLine("3 - Ändern der Daten einer Kiste");
    Console::WriteLine("4 - Anzeigen der Daten einer Kiste");
    Console::WriteLine("5 - alle Daten der Kisten anzeigen");

    auswahl=Console::Read();
    Console::ReadLine();

    switch (auswahl) {
    case 1:
    eingabe();
    break;
    case 2:
    loeschen();
    break;
    case 3:
    aendern();
    break;
    case 4:
    anzeigen();
    break;
    case 5:
    listen();
    break;

    default:
    Console::WriteLine("sie haben leider keine Auswahl getroffen");
    }
    return 0;
    }

    danke !!!!!!!



  • Nyoko schrieb:

    Ich muss mir den Code noch mehrmals anschauen
    um zu Wissen wieso das auf einmal funktioniert.
    (Ich hab den Code neu geschrieben und eine while
    Schleife benutzt, wobei ich das das erste Mal auch
    schon tat...na ich werd noch drauf kommen).

    Danke für alle die sich die Mühe gemacht haben mir
    zu antworten.

    Soviel zum Thema, schreibt einen Code und versteht ihn nicht...🤡
    Copy & Paste macht es möglich...
    Ich wünsche Dir eine 1...
    Und bald einen netten Chef, der Dir die Copy & Paste Eigenschaft ermöglicht...



  • Nee drei

    Aber es ist nicht C++. Dieses C++/CLI scheint doch sehr wenig von C++ zu haben. Im Visual C++ 2010 Framework? kann man aber C++ schreiben.

    Bin übrigens bei der selben Aufgabe

    champman 😃



  • Hallo habe die Beiträge gelesen doch ich habe noch ein anderes Problem. Bei mir klappt der Aufruf der Methode aus dem Main() Programm nicht.

    Habe die Stelle mit ?????? gekennzeichnet, weiß nicht wie ich die Methode Lösche() aufrufen kann.

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    
    namespace ConsoleApplication1
    {
        class Program
        {
            struct Kiste
            {
                public int Nummer;
                public int Hoehe;
                public int Breite;
                public int Laenge;
                public int Volumen;
            }
    
            static Kiste Neu(int KisteNeu)
            {
                Kiste Verwaltung;
                Console.Write("Geben Sie die Höhe der {0}. Kiste ein: ", KisteNeu);
                Verwaltung.Hoehe = Convert.ToInt32(Console.ReadLine());
                Console.Write("Geben Sie die Breite der {0}. Kiste ein: ", KisteNeu);
                Verwaltung.Breite = Convert.ToInt32(Console.ReadLine());
                Console.Write("Geben Sie die Länge der {0}. Kiste ein: ", KisteNeu);
                Verwaltung.Laenge = Convert.ToInt32(Console.ReadLine());
                Verwaltung.Volumen = Verwaltung.Hoehe * Verwaltung.Breite * Verwaltung.Laenge;
                Console.WriteLine("Das Volumen dieser Kiste beträgt:\t{0}", Verwaltung.Volumen);
                Console.WriteLine();
                Verwaltung.Nummer = 1;
                return Verwaltung;
            }
    
            static void Löschen(Kiste Verwaltung)
            {
                int ID;
                Console.WriteLine("Geben Sie Nummer der zu löschenden Kiste ein (1-100):\t");
                ID = Convert.ToInt32(Console.ReadLine()) - 1;
    
                if (ID >= 0 && ID < 100)
                {
                    if (Verwaltung.Nummer == 0)
                    {
                        Console.WriteLine("Die Kiste ist bereits gelöscht");
                    }
                    if (Verwaltung.Nummer == 1)
                    {
                        Verwaltung.Nummer = 0;
                        Verwaltung.Hoehe = 0;
                        Verwaltung.Breite = 0;
                        Verwaltung.Laenge = 0;
                        Console.WriteLine("Kistennummer: {0} GELÖSCHT", ID);
                    }
                }
                else
                    Console.WriteLine("Sie haben eine nicht vorhandene Kistenummer eingegeben!");
            }
    
            static void Main(string[] args)
            {
                Kiste[] Lager = new Kiste[2];
                int Auswahl = 0;
    
                while (Auswahl != 6)
                {
                    Console.WriteLine("\nSie haben nun folgende Auswahl zur Verfügung: \n");
                    Console.WriteLine("1)  neue Kiste anlegen");
                    Console.WriteLine("2)  Datensatz löschen");
                    Console.WriteLine("3)  Datensatz ändern");
                    Console.WriteLine("4)  Datensatz anzeigen");
                    Console.WriteLine("5)  Übersicht über alle angelegten Datensätze");
                    Console.WriteLine("6)  Programm beenden\n\n");
                    Console.Write("Bitte wählen Sie:\t");
                    Auswahl = Convert.ToInt32(Console.ReadLine());
    
                    switch (Auswahl)
                    {
                        case 1:
                            for (int index = 0; index < Lager.Length; index++)
                                Lager[index] = Neu(index + 1);
                            break;
    
                        case 2:
                            Löschen(????????);
                            break;
    
                        case 3:
                            Console.WriteLine("\n\n");
                            break;
    
                        case 4:
                            Console.WriteLine("\n\n");
                            break;
    
                        case 5:
                            Console.WriteLine("\n\n");
                            break;
    
                        default:
                            Console.WriteLine("\n!!!Sie haben eine falsch Auswahl getroffen!!!\n\n");
                            break;
                    }
                }
            }
        }
    }
    

    Danke





  • Das ist ja recht und gut aber ich versteh das dennoch gerade nicht. Will ja kein fertiges sondern eher eine Erklärung was ich in den Klammern von Löschen() schreiben muss um die Methode aufzurufen.

    Dort steh ich auf dem Schlauch und komme nicht weiter, wäre echt super wenn mir einer helfen könnte.



  • Schau Dir doch die Lösung an, dann siehst Du es doch...



  • Sorry klar das hab ich auch aber mit den vielen verschiedenen Begriffen und Zuweisungen komm ich noch nicht ganz klar. Bin recht neu beim programmieren, daher wäre ich wirklich dankbar wenn es einer versucht mir Schritt für Schritt zu erklären warum ich was in die Klammer von Löschen schreiben muss.
    Denn bei der Lösung kann ich nicht nachvollziehen warum da grossekiste drin steht.

    Bitte



  • Hallo,

    habe das Programm auch als Aufgabe bearbeitet, und es über extra definierte Methoden geschrieben so dass ich alle Quelltexte klein gehalten habe.

    Hast du denn jetzt eine Lösung ?

    Arbeite zur zeit am verständnis der tracking handles 😕

    Gruss
    Aleana



  • Hallo
    Die Aufgabe gibts immer noch.... aber bei mir etwas abgeändert...

    Soweit funktioniert alles.
    Nur kann ich das Programm nicht beenden. kann die auswahl zwar eingeben, programm stürzt dann aber ab. wenn ich die schleife in main vor dem while rausnehme gehts aber die brauch ich ja damit die kisten alle auf 0 gesetzt werden...
    Außerdem suche ich nach einer möglichkeit dass wenn beim ausgeben der funktion alle der untere bildschirmrand erreicht ist die ausgabe anhält und durch tastendruck weiterläuft...

    Für tips wäre ich sehr dankbar!

    #include "stdafx.h"

    using namespace System;

    const Int32 Maxzahl=1000;

    struct Kiste {

    Int32 kistenNummer;
    Int32 höhe;
    Int32 breite;
    Int32 länge;
    Int32 volumen;
    };

    void anlegen (Kiste feld[Maxzahl]) {

    Int32 i;

    Console::WriteLine("Welche Kiste soll neu angelegt werden?");
    Console::Write("Bitte geben Sie eine Nummer für die Kiste ein: ");
    i=Convert::ToInt32(Console::ReadLine())-1;

    if (i <= Maxzahl && i >= 0){

    if (feld[i].kistenNummer ==0){
    Console::WriteLine("\nBitte geben sie die Kistendaten ein: ");
    Console::Write("\nBreite:\t");
    feld[i].breite=Convert::ToInt32(Console::ReadLine());
    Console::Write("\nHöhe:\t");
    feld[i].höhe=Convert::ToInt32(Console::ReadLine());
    Console::Write("\nLänge:\t");
    feld[i].länge=Convert::ToInt32(Console::ReadLine());

    feld[i].volumen=feld[i].breite*feld[i].höhe*feld[i].länge;
    Console::WriteLine("\n--> Volumen = {0}", feld[i].volumen);
    feld[i].kistenNummer=i+1;
    }
    else
    Console::WriteLine("\nDiese Kiste ist schon vergeben. Bitte wählen Sie eine andere.");
    }
    else
    Console::WriteLine("\nIhre Eingabe war ungültig. Bitte versuchen Sie es erneut.");
    }

    void löschen (Kiste feld[Maxzahl]){

    Int32 i;

    Console::WriteLine("Welche Kiste soll gelöscht werden?");
    Console::Write("Bitte geben Sie eine Nummer für die Kiste ein: ");
    i=Convert::ToInt32(Console::ReadLine())-1;

    if (i <= Maxzahl && i >= 0){

    if (feld[i].kistenNummer >0){
    feld[i].kistenNummer=0;
    }
    else
    Console::WriteLine("\nDiese Kiste existiert noch nicht. Bitte wählen sie eine andere.");
    }
    else
    Console::WriteLine("\nIhre Eingabe war ungültig. Bitte versuchen Sie es erneut.");
    }

    void ändern (Kiste feld[Maxzahl]){

    Int32 i;

    Console::WriteLine("Welche Kiste soll geändert werden?");
    Console::Write("Bitte geben Sie eine Nummer für die Kiste ein: ");
    i=Convert::ToInt32(Console::ReadLine())-1;

    if (i <= Maxzahl && i >= 0){

    if (feld[i].kistenNummer >0){
    Console::WriteLine("\nBitte geben sie die Kistendaten ein:");
    Console::Write("\nBreite:\t");
    feld[i].breite=Convert::ToInt32(Console::ReadLine());
    Console::Write("\nHöhe:\t");
    feld[i].höhe=Convert::ToInt32(Console::ReadLine());
    Console::Write("\nLänge:\t");
    feld[i].länge=Convert::ToInt32(Console::ReadLine());

    feld[i].volumen=feld[i].breite*feld[i].höhe*feld[i].länge;
    Console::WriteLine("\n--> Volumen = {0}", feld[i].volumen);
    feld[i].kistenNummer =i+1;
    }
    else
    Console::WriteLine("\nDiese Kiste existiert noch nicht. Bitte wählen sie eine andere.");
    }
    else
    Console::WriteLine("\nIhre Eingabe war ungültig. Bitte versuchen Sie es erneut.");
    }

    void anzeigen(Kiste feld[Maxzahl]){

    Int32 i;

    Console::WriteLine("Welche Kiste soll angezeigt werden?");
    Console::Write("Bitte geben Sie eine Nummer für die Kiste ein: ");
    i=Convert::ToInt32(Console::ReadLine())-1;

    if (i <= Maxzahl && i >= 0){

    if (feld[i].kistenNummer >0){
    Console::WriteLine("\nNummer:\t{0}", feld[i].kistenNummer);
    Console::WriteLine("Breite:\t{0}", feld[i].breite);
    Console::WriteLine("Höhe:\t{0}", feld[i].höhe);
    Console::WriteLine("Länge:\t{0}", feld[i].länge);
    Console::WriteLine("Volumen:\t{0}", feld[i].volumen);
    }
    else
    Console::WriteLine("\nDiese Kiste existiert noch nicht. Bitte wählen sie eine andere.");
    }
    else
    Console::WriteLine("\nIhre Eingabe war ungültig. Bitte versuchen Sie es erneut.");
    }

    void alle (Kiste feld[Maxzahl]){

    Console::WriteLine("\nNummer\tBreite\tHöhe\tLänge\tVolumen");
    for (Int32 i=0;i<=Maxzahl;i++){
    if (feld[i].kistenNummer >0)
    Console::WriteLine("{0}\t{1}\t{2}\t{3}\t{4}", feld[i].kistenNummer,feld[i].breite,feld[i].höhe,feld[i].länge,feld[i].volumen);
    }
    }

    int main(array<System::String ^> ^args)

    {

    Kiste feld[Maxzahl];
    Int32 auswahl =0;

    for (Int32 i=0; i <= Maxzahl; i++){
    feld[i].kistenNummer=0;
    }

    while (auswahl != 9){
    Console::WriteLine("\nBitte wählen Sie eine Funktion aus");
    Console::WriteLine("1 - Neue Kiste anlegen");
    Console::WriteLine("2 - Kiste löschen");
    Console::WriteLine("3 - Kiste ändern");
    Console::WriteLine("4 - Kiste anzeigen");
    Console::WriteLine("5 - Liste aller Kisten ausgeben");
    Console::WriteLine("9 - Programm beenden");
    Console::Write("\nIhre Auswahl: ");
    auswahl=Convert::ToInt32(Console::ReadLine());

    switch (auswahl){
    case 1:
    anlegen(feld);
    break;

    case 2:
    löschen(feld);
    break;

    case 3:
    ändern (feld);
    break;

    case 4:
    anzeigen (feld);
    break;

    case 5:
    alle (feld);
    break;

    case 9:
    break;

    default:
    Console::WriteLine("Ihre Eingabe war ungültig. Bitte versuchen Sie es erneut.");
    }

    }

    Console::Read();

    return 0;
    }



  • Wenn das Programm abstürzt, dann musst Du einfach Debuggen, dann siesht Du sofort was Du falsch gemacht hast...



  • Danke für die schnelle Antwort aber...

    sry aber das mit dem debuggen ist mir neu. Bekomme da folgende meldung:

    STATUS_STACK_BUFFER_OVERRUN encountered
    Der Thread 'Win32-Thread' (0x1198) hat mit Code -1073740791 (0xc0000409) geendet.
    Der Thread 'Win32-Thread' (0xef8) hat mit Code -1073740791 (0xc0000409) geendet.
    Der Thread 'Win32-Thread' (0x10c8) hat mit Code -1073740791 (0xc0000409) geendet.
    Das Programm "[3948] c4.exe: Systemeigen" wurde mit Code -1073740791 (0xc0000409) beendet.
    Das Programm "[3948] c4.exe: Verwaltet (v4.0.30319)" wurde mit Code -1073740791 (0xc0000409) beendet.

    was heißt das denn im einzelnen? Wo finde ich die erklärung zu dem code?

    Und hast du villeicht ne Idee wegen der Sache mit dem Anhalten bei der Auflistung?



  • Du initialisierst hier ein Array mit einem Element zu viel!

    Kiste feld[Maxzahl]; 
    
    for (Int32 i=0; i <= Maxzahl; i++){ 
      feld[i].kistenNummer=0; 
    }
    

    Und dies wird beim Verlassen der "main" Methode festgestellt...
    =>

    Kiste feld[Maxzahl]; 
    
    for (Int32 i=0; i < Maxzahl; i++){ 
      feld[i].kistenNummer=0; 
    }
    


  • ahhh...
    hoffe liege jetzt nicht voll daneben... Wenn ich dem Array Maxzahl 3 Elemente gebe und ihm dann beim initialisieren aber sage <= Maxzahl hat er wegen der 0 eins zu viel und beschwert sich...???
    Hab den Code dementsprechend überall geändert. Alles einwandfrei.
    Vielen Vielen Dank. Hat mich heute kirre gemacht.


Anmelden zum Antworten