Array
-
Hallo
Da ich ja die KistenNummer eingeben muss, die ich löschen will, braucht er in der letzten Zeile ein Array aber wie mache ich das?[code] } // Löschen einer Kiste Int32 loeschen(Int32 kistenNummer) { Int32 kisteLoeschen; kisteLoeschen=1; Console::WriteLine(" Eingeben der Kisten Nummer zum loeschen"); kisteLoeschen=Convert::ToInt32(Console::ReadLine()); return kisteLoeschen; } // Funktion eine Kiste löschen kiste kleineKiste[3]; Int32 meineLoeschen; for (Int32 schleife=0; schleife <3; schleife++) Console::WriteLine("Meine zu loeschende Kiste{0} = {1}",schleife+1, loeschen[schleife])); }
[/code]
Vielen Dank im Voraus
-
Der Code macht zusammen mit der Frage keinen Sinn. Was willst Du machen?
-
LordJaxom schrieb:
Der Code macht zusammen mit der Frage keinen Sinn. Was willst Du machen?
Dies ist das ganz Programm
[code] struct kiste { Int32 eingabe; Int32 hoehe; Int32 breite; Int32 laenge; Int32 loeschen; }; // die Funktion zum einelesen der Kisten kiste einlesen(Int32 kistenNummer) { // Eine globale STrukturvariable kiste aKiste; Console::Write("\nGeben Sie die Höhe der {0} Kiste ein = ",kistenNummer); aKiste.hoehe=Convert::ToInt32(Console::ReadLine()); Console::Write("\nGeben sie die breite der {0} Kiste ein = ",kistenNummer); aKiste.breite=Convert::ToInt32(Console::ReadLine()); Console::Write("\nGeben Sie die länge der {0} Kiste ein = ",kistenNummer); aKiste.laenge=Convert::ToInt32(Console::ReadLine()); return aKiste; } // Berechnen des Volumens der Kisten Int32 volumen(kiste aKiste) { Int32 volWert; volWert=aKiste.hoehe * aKiste.breite * aKiste.laenge; return volWert; } // Löschen einer Kiste Int32 loeschen(Int32 kistenNummer) { Int32 kisteLoeschen; kisteLoeschen=1; Console::WriteLine(" Eingeben der Kisten Nummer zum loeschen"); kisteLoeschen=Convert::ToInt32(Console::ReadLine()); return kisteLoeschen; } int main(array<System::String ^> ^args) { Char funktionAuswahl; Console::WriteLine(" Auswahl der Funktionen"); Console::WriteLine(" a Eingabe der Daten für die Kisten"); Console::WriteLine(" b Loeschen einer Kiste"); Console::Write(" wählen Sie aus = "); funktionAuswahl=Convert::ToChar(Console::ReadLine()); // Die Auswahl der einzelnen Funktionen switch (funktionAuswahl) { case 'a': break; case 'b': break; default: Console::WriteLine(" Sie haben ein falsche Zeichen eingegeben"); } /*#################################################################*/ { // Die lokale Vereinbarung der Strukturvariablen für die Kisten kiste kleineKiste[100]; // Das einlesen der Daten über die Funktion for (Int32 schleife=0; schleife <3; schleife++) kleineKiste[schleife]=einlesen(schleife+1); for (Int32 schleife=0; schleife <3; schleife++) Console::WriteLine("Das Volumen der Kisten {0} ist: {1}",schleife+1, volumen(kleineKiste[schleife])); } /*###############################################################*/ // Funktion eine Kiste löschen kiste kleineKiste[3]; Int32 meineLoeschen; for (Int32 schleife=0; schleife <3; schleife++) Console::WriteLine("Meine zu loeschende Kiste{0} = {1}",schleife+1, loeschen[schleife])); } return 0; }
[/code]
-
Verwende kein Array sondern eine Liste:
List<kiste> kisten;
-
Jochen Kalmbach schrieb:
Verwende kein Array sondern eine Liste:
List<kiste> kisten;
Das "muss" man aber da es in der Aufgabenstellung gefordert wird! (wenn ich das richtig verstanden habe!)
-
Jochen Kalmbach schrieb:
Verwende kein Array sondern eine Liste:
List<kiste> kisten;
Zuerst hat er über List gemeckert wäre nicht deklariert, habe ich gemacht, und jetzt kommt die Fehlermeldung
[code] kiste kleineKiste[3]; Int32 meineLoeschen; Int32 List=0; List <kiste> kisten; for (Int32 schleife=0; schleife <3; schleife++) Console::WriteLine("Meine zu loeschende Kiste{0} = {1}",schleife+1, loeschen[schleife])); }
[/code]
Kiste.cpp(83) : error C2275: 'kiste': Ungültige Verwendung dieses Typs als Ausdruck
.\Kiste.cpp(7): Siehe Deklaration von 'kiste'
-
Du musst einen manage Typ anlegen...
value struct kiste { Int32 eingabe; Int32 hoehe; Int32 breite; Int32 laenge; Int32 loeschen; };
-
Jochen Kalmbach schrieb:
Du musst einen manage Typ anlegen...
value struct kiste { Int32 eingabe; Int32 hoehe; Int32 breite; Int32 laenge; Int32 loeschen; };
Dann kommt diese Fehlermeldung
error C2728: "kiste": Ein systemeigenes Array kann diesen verwalteten Typ nicht enthalten.
Meinten Sie ''array<kiste>''?
-
Also, nochmals der gesamte angepasste Code:
using namespace System; value struct kiste { Int32 hoehe; Int32 breite; Int32 laenge; double volumen() { double volWert; volWert=hoehe * breite * laenge; return volWert; } virtual String ^ToString() override { return String::Format("h: {0}, b: {1}, l: {2}; V = {3}", hoehe, breite, laenge, volumen()); } }; // die Funktion zum einelesen der Kisten kiste einlesen() { // Eine globale STrukturvariable kiste aKiste; Console::Write("\nGeben Sie die Höhe der Kiste ein:"); aKiste.hoehe=Convert::ToInt32(Console::ReadLine()); Console::Write("\nGeben sie die Breite der Kiste ein:"); aKiste.breite=Convert::ToInt32(Console::ReadLine()); Console::Write("\nGeben Sie die Länge der Kiste ein:"); aKiste.laenge=Convert::ToInt32(Console::ReadLine()); return aKiste; } // Löschen einer Kiste void loeschen(System::Collections::Generic::List<kiste> %kisten) { Console::WriteLine("Eingeben der Kisten Nummer zum loeschen:"); kisten.RemoveAt(int::Parse(Console::ReadLine())); } int main(array<System::String ^> ^args) { Console::WriteLine(" Auswahl der Funktionen"); Console::WriteLine(" a Eingabe der Daten für die Kisten"); Console::WriteLine(" b Loeschen einer Kiste"); Console::WriteLine(" d Alle Kisten anzeigen"); // Die Auswahl der einzelnen Funktionen System::Collections::Generic::List<kiste> kisten; bool bEnd = false; while(bEnd == false) { Console::WriteLine(); Console::Write(" wählen Sie aus = "); Char funktionAuswahl = Convert::ToChar(Console::ReadLine()); switch (funktionAuswahl) { case 'a': kisten.Add(einlesen()); break; case 'b': loeschen(kisten); break; case 'd': for each(kiste k in kisten) Console::WriteLine(k); break; case 'q': bEnd = true; break; default: Console::WriteLine(" Sie haben ein falsche Zeichen eingegeben"); break; } } }
-
Jochen Kalmbach schrieb:
Also, nochmals der gesamte angepasste Code:
using namespace System; value struct kiste { Int32 hoehe; Int32 breite; Int32 laenge; double volumen() { double volWert; volWert=hoehe * breite * laenge; return volWert; } virtual String ^ToString() override { return String::Format("h: {0}, b: {1}, l: {2}; V = {3}", hoehe, breite, laenge, volumen()); } }; // die Funktion zum einelesen der Kisten kiste einlesen() { // Eine globale STrukturvariable kiste aKiste; Console::Write("\nGeben Sie die Höhe der Kiste ein:"); aKiste.hoehe=Convert::ToInt32(Console::ReadLine()); Console::Write("\nGeben sie die Breite der Kiste ein:"); aKiste.breite=Convert::ToInt32(Console::ReadLine()); Console::Write("\nGeben Sie die Länge der Kiste ein:"); aKiste.laenge=Convert::ToInt32(Console::ReadLine()); return aKiste; } // Löschen einer Kiste void loeschen(System::Collections::Generic::List<kiste> %kisten) { Console::WriteLine("Eingeben der Kisten Nummer zum loeschen:"); kisten.RemoveAt(int::Parse(Console::ReadLine())); } int main(array<System::String ^> ^args) { Console::WriteLine(" Auswahl der Funktionen"); Console::WriteLine(" a Eingabe der Daten für die Kisten"); Console::WriteLine(" b Loeschen einer Kiste"); Console::WriteLine(" d Alle Kisten anzeigen"); // Die Auswahl der einzelnen Funktionen System::Collections::Generic::List<kiste> kisten; bool bEnd = false; while(bEnd == false) { Console::WriteLine(); Console::Write(" wählen Sie aus = "); Char funktionAuswahl = Convert::ToChar(Console::ReadLine()); switch (funktionAuswahl) { case 'a': kisten.Add(einlesen()); break; case 'b': loeschen(kisten); break; case 'd': for each(kiste k in kisten) Console::WriteLine(k); break; case 'q': bEnd = true; break; default: Console::WriteLine(" Sie haben ein falsche Zeichen eingegeben"); break; } } }
Hallo
Ich finde es super toll das du dir soviel Mühe gemacht hast, aber da ist soviel drin was ich noch garnicht hatte, wenn ich das abschicke weis er sofort das das nicht von mir ist.
Schau dir bitte noch einmal das an[code] kiste kleineKiste[3]; Int32 meineLoeschen; for (Int32 schleife=0; schleife <3; schleife++) Console::WriteLine(" Index Auswahl {0} = ",meineLoeschen); }
[/code]
Fehlermeldung .\Kiste.cpp(82) : warning C4101: 'kleineKiste': Unreferenzierte lokale Variable
wie referenziere ich das?
-
Du sollst die Kiste nicht als Array anlegen sondern als List<kiste>...
oder dann als "managed array":
array<kiste>[3]
-
Ich poste mal frei "meine" Variante:
#include "stdafx.h" using namespace System; struct kiste { Int32 kistenNummer; Int32 hoehe; Int32 breite; Int32 laenge; Int32 volumen; }; // die Funktion zum einelesen der Kisten void einlesen(kiste kleineKiste[]) { //Das überlasse ich dir! ;) } // Löschen einer Kiste void loeschen(kiste kleineKiste[]) { //Vereinbarung einer Variable Int32 eingabe, datensatz; Boolean gefunden = false; //Einlesen der "wunsch" nummer Console::Write("Geben Sie die Nummer der Kiste ein: "); eingabe = Convert::ToInt32(Console::ReadLine()); //Durchlauf aller kistennummer und suche ob vorhanden for(Int32 i = 0; i < 100; ++i){ if(eingabe == kleineKiste[i].kistenNummer) { datensatz = i; gefunden = true; break; } } //Wenn ja Datensatz auf 0 setzen/löschen sonst meldung if(gefunden == true){ kleineKiste[datensatz].kistenNummer = 0; Console::WriteLine("Kiste erfolgreich gelöscht!"); } else Console::WriteLine("Dieses Kiste gibt es nicht!"); } void anzeigen(kiste kleineKiste[]) { Console::WriteLine("Nr.\tBreite\tHöhe\tLänge\tVolumen"); for(Int32 i = 0; i < 4; ++i){ if(kleineKiste[i].kistenNummer != 0) Console::WriteLine("{0}\t{1}\t{2}\t{3}\t{4}", kleineKiste[i].kistenNummer, kleineKiste[i].breite, kleineKiste[i].hoehe, kleineKiste[i].laenge, kleineKiste[i].volumen); } } int main(array<System::String ^> ^args) { //Vereinbarung einer Strukturvariable mit 100 Elementen kiste kleineKiste[100]; //Vereinbarung einer Char Variable Char funktionAuswahl; Console::WriteLine(" Auswahl der Funktionen"); Console::WriteLine(" a Eingabe der Daten für die Kisten"); Console::WriteLine(" b Loeschen einer Kiste"); Console::WriteLine(" d Alle Kisten anzeigen"); Console::WriteLine(" q Programmende"); //Alle Elemente auf "NULL" bringen! for(Int32 i = 0; i < 4; ++i){ kleineKiste[i].kistenNummer = 0; kleineKiste[i].hoehe = 0; kleineKiste[i].laenge = 0; kleineKiste[i].breite = 0; kleineKiste[i].volumen = 0; } //Das ist nur zur Demonstration kleineKiste[1].kistenNummer = 88; kleineKiste[1].hoehe = 23; kleineKiste[1].breite = 22; kleineKiste[1].laenge = 88; kleineKiste[1].volumen = kleineKiste[1].laenge * kleineKiste[1].breite * kleineKiste[1].hoehe; kleineKiste[2].kistenNummer = 33; kleineKiste[2].hoehe = 33; kleineKiste[2].breite = 88; kleineKiste[2].laenge = 77; kleineKiste[2].volumen = kleineKiste[2].laenge * kleineKiste[2].breite * kleineKiste[2].hoehe; // Die Auswahl der einzelnen Funktionen Console::WriteLine(); do { Console::Write(" wählen Sie aus = "); funktionAuswahl = Convert::ToChar(Console::ReadLine()); switch (funktionAuswahl){ case 'a': //einfuegen(kleineKiste); break; case 'b': loeschen(kleineKiste); break; case 'd': anzeigen(kleineKiste); break; case 'q': Console::WriteLine("Programmende!"); break; default: Console::WriteLine(" Sie haben ein falsche Zeichen eingegeben"); break; } }while(funktionAuswahl != 'q'); return 0; }
Ich will nur sagen das ich gerne Kritik annehme und gerne auch höre wie ich den Quelltext bzw. meinen Stil verändere/Optimiere aber bitte nicht übertreiben
@Heinerich: Ich habe die Funktion "loeschen*" und "anzeigen" nach meinem Verständnis der Aufgabe mal ganz einfach (ohne sicherheitsabfragen etc.) Programmiert. Die Restlichen Funktionen solltest du -falls du hier alles verstehst- auch ähnlich oder sogar besser hinbekommen.
Ich habe einige Zeilen zusätlich in die main()-Funktion eingefügt um einpaar Daten schon mal in dem Lager zu haben die kannst/musst du natürlich Löschen.
Die Ausgabe und das auf "null"-bringen habe ich absichtlich nicht auf alle "Datensätze" angewandt. (Du sollst ja auch noch etwas zu tun haben ;))
Viel Erfolg
Gruß
Rudolf G* Für alle die, die Aufgabenstellung nicht kennen, eine Kiste löscht man in dem man die Kistennummer auf 0 setzt. Das heißt das die anderen Daten (Höhe/Breite/Länge) bleiben dürfen aber bei nächster "neuer" Kiste werden die Daten überschrieben!
-
Heinerich schrieb:
Hallo
Ich finde es super toll das du dir soviel Mühe gemacht hast, aber da ist soviel drin was ich noch garnicht hatte, wenn ich das abschicke weis er sofort das das nicht von mir ist.
Schau dir bitte noch einmal das an[code] kiste kleineKiste[3]; Int32 meineLoeschen; for (Int32 schleife=0; schleife <3; schleife++) Console::WriteLine(" Index Auswahl {0} = ",meineLoeschen); }
[/code]
Fehlermeldung .\Kiste.cpp(82) : warning C4101: 'kleineKiste': Unreferenzierte lokale Variable
wie referenziere ich das?weiss jetzt nicht aus dem stehgreif ob die meldung damit zu tun hat, aber dir fehlen da die geschweiften klammern an der for-schleife..
ich habe die aufgabe damals auch gehabt und ganz ehrlich lange dran gesessen,
aber im grunde steht alles was man braucht im heft..
ich hab mir das teil zig mal durchgelesen und die aufgabe dann auch bald gelöst gehabt
-
nylon schrieb:
weiss jetzt nicht aus dem stehgreif ob die meldung damit zu tun hat, aber dir fehlen da die geschweiften klammern an der for-schleife..
Nein, das hat nichts damit zu tun. Da die Forschleife nur eine Anweisung hat und da braucht man keine geschweifte Klammern, die werden nur bei mehreren Anweisung für die for/if gebraucht.
-
Rudi G schrieb:
Nein, das hat nichts damit zu tun. Da die Forschleife nur eine Anweisung hat und da braucht man keine geschweifte Klammern, die werden nur bei mehreren Anweisung für die for/if gebraucht.
ah ja.. lang ists her.
habe mir angewöhnt auch bei einzelnen anweisungen die klammern zu setzen.. der übersicht halber.
macht der gewohnheit ;>edit:
@Heinerichum trotzdem noch die fehlermeldung zu erläutern, die felder von kleineKiste werden ja mit keinen werten initialisert.
kiste kleineKiste[3] = {1,2,3};
wäre zb korrekt.
-
nylon schrieb:
die felder von kleineKiste werden ja mit keinen werten initialisert.
Das ist solange kein Problem, solange man nicht auf den Speicher (die Elemente) nicht zugreift. Aber sobald man auf die Elemente Zugreif und dann "zufälliges" drin ist kann/wird das Programm abstürzen.
Um das zu verhindert durchläuft die schleife alle Datensätze & Elemente und initialisiert sie mit 0!
//Alle Elemente initialieren! for(Int32 i = 0; i < 4; ++i){ kleineKiste[i].kistenNummer = 0; kleineKiste[i].hoehe = 0; kleineKiste[i].laenge = 0; kleineKiste[i].breite = 0; kleineKiste[i].volumen = 0; }
nylon schrieb:
kiste kleineKiste[3] = {1,2,3};
wäre zb korrekt.
Das kann ich nicht so stehen lassen. Bei einem Int32 kleineKiste[3] (oder anderen Datentypen) währe es sicherlich richtig aber dass geht -meines Wissens- nicht! Das ist nämlich eine Strukturvariable das mehrere Datentypen & Variablen beinhaltet.
Und welchem Element werden die Werte dann zugeordnet? Dem Element "kistenNummer" in der Struktur?
-
hoppla ja, mein fehler.. zu sehr auf die fehlermeldung geschaut..
was rudi geposted hat ist korrekt und beschreibt das was ich dachte.sorry
-
Ich habe eine ähnliche Aufgabe, möchte jedoch, dass die Kistennummer automatisch vergeben wird. Das klappt allerdings nur im CASE Teil. Wie bekomme ich das als Funktion hin?
case 1: k[i].kistenNummer=i; Console::Write("Länge des Artikels : "); k[i].laenge=Convert::ToInt32(Console::ReadLine()); Console::Write("Höhe des Artikels : "); k[i].hoehe=Convert::ToInt32(Console::ReadLine()); Console::Write("Breite des Artikels : "); k[i].breite=Convert::ToInt32(Console::ReadLine()); Console::WriteLine(); Console::WriteLine("Art.nr. lautet {0}",i); Console::WriteLine("Volumen = {0}",k[i].breite*k[i].hoehe*k[i].laenge); Console::WriteLine(); i++;