Dynamische Speicherallokation: Aufgabe
-
Bin ein völliger Anfänger bei C++ und komme gerade bei einer Aufgabe nicht weiter.
Aufgabe: Erstellen Sie eine C++-Anwendung, in der Sie dynamisch ein eindimensionales Array vom Typ short erstellen. Der Anwender Ihres Programms soll angeben können, aus wie vielen Elementen das Array bestehen soll. Legen Sie abwechselnd in alle Elemente des Arrays die Zahlen 0 und 1 hinein und geben Sie danach den Inhalt des Arrays auf den Bildschirm aus.
Ich habe jetzt erstmal so angefangen:
#include <string>
#include <iostream>
using namspace std;short Array[i];
int main()
{
int i;cout << "Wie viele Array-Elemente moechten Sie speichern? " <<flush;
cin >> i;Array* arrays = new Array[i];
for (int b = 0; b < i; ++b)
{Nun frage ich mich aber was mit "lege nun abwechselnd....." gemeint ist.
Kann mir jemand auf die Sprünge helfen ?Grüße
silent12
-
silent1297 schrieb:
Nun frage ich mich aber was mit "lege nun abwechselnd....." gemeint ist.
Kann mir jemand auf die Sprünge helfen ?Wenn ich raten müsste: Immer im Wechsel - an geraden Indizes eine 0, an ungeraden Indizes eine 1.
(ansonsten: Bei dir ist "Array" ein globales Array (bzw. ein Syntaxfehler, weil bei der Definition i nicht bekannt ist) - und dadurch auch die Anweisung
Array* arrays = new Array[i];fehlerhaft)
-
Hallo am C++-Forum
Hier haben wir Code-Tags: Start mit [cpp] und Ende mit [/cpp]
Zu der eigentlichen Frage:Array* arrays = new Array[i];Hier ist
Arraykein Typ (was es sein sollte) sondern ein Bezeichner einer (globalen) Variable. Entferne die (fehlerhafte und nutzlose) globale Definition des Arrays. Ersetze in dieser Zeile "Array" mit "short". Und wie man das mit dem Abwechseln macht: Kennst du schon Modulo?MfG, EOutOfResources
EDIT: CStoll war wieder mal schneller

-
Wooow geht das hier schnell

Danke für den Tipp.
Modulo ? Ist dass das mit dem % Zeichen oder so ähnlich ?
Grüße
silent1297
-
silent1297 schrieb:
Modulo ? Ist dass das mit dem % Zeichen oder so ähnlich ?
Genau.
-
Jetzt müsste ich nur noch wissen wie das funktionierte :p habe davon nur mal nebenbei in einem Thread gelesen

-
silent1297 schrieb:
Jetzt müsste ich nur noch wissen wie das funktionierte :p habe davon nur mal nebenbei in einem Thread gelesen

if(Variable % 2) { //Variable ist ungerade } else { //Variable ist gerade }
-
Viel zu wissen gibts da eigentlich nicht: Der %-Operator gibt den Rest einer Division zurück.
8 % 3ist z.B.2.Wenn du nun modulo 2 rechnest, ist das Ergebnis immer 0 oder 1. Das kannst du für die Abwechslung ausnutzen.
-
silent1297 schrieb:
Aufgabe: Erstellen Sie eine C++-Anwendung, in der Sie dynamisch ein eindimensionales Array vom Typ short erstellen. Der Anwender Ihres Programms soll angeben können, aus wie vielen Elementen das Array bestehen soll. Legen Sie abwechselnd in alle Elemente des Arrays die Zahlen 0 und 1 hinein und geben Sie danach den Inhalt des Arrays auf den Bildschirm aus.
Nun frage ich mich aber was mit "lege nun abwechselnd....." gemeint ist.
Kann mir jemand auf die Sprünge helfen ?Ich verstehe das so, daß die Ausgabe der Elemente des Arrays dann so aussehen soll:
0,1,0,1,0,1,0,etc.silent1297 schrieb:
Aufgabe: Erstellen Sie eine C++-Anwendung,
Das Array, was du verwendet hast, ist eigentlich ein C-Array, keins aus C++.
Unter C++ wäre das ein vector.
z.B. wird mit#include <vector> using namespace std; int main() { vector<int>test; return 0; }ein Array test mit int-Werten angelegt, welches in Bezug auf die Anzahl der Elemente beliebig verändert werden kann.
Weitere Infos kann man unter http://www.cplusplus.com/reference/stl/vector/ nachlesen
oder einfach mal nach "vector tutorial" googlen.
-
redrew99 schrieb:
Unter C++ wäre das ein vector.
Ich würde eher auf
std::tr1::arrayverweisen.
-
Ich glaube dass das mit dem Array schon so gemeint ist, da in dem dazugehörigen Tutorial http://www.highscore.de/cpp/einfuehrung/index.html
es so verwendet wird.
Für mich klingt die Aufgabenstellung auch eher nach: ungerade Zahlen: 0
gerade Zahlen:1 nur wie soll ich das ausgeben ? einfach als Zahlenkette ( 01010101..) ?Grüße
silent1297
-
Hat niemand eine Idee für die Ausgabe ? Oder muss ich am Ende noch mehr umstellen ? Mein Code:
#include <string>
#include <iostream>
using namespace std;int main()
{
int i;
short Array[i];cout << "Wie viele Array-Elemente moechten Sie speichern? " <<flush;
cin >> i;short* arrays = new short[i];
for (int b = 0; b < i; ++b)
{
if (b % 2)
{ b = 0;}
else { b = 1;
}
}delete[] Array;
system ("Pause");
}
-
* das Array am Anfang der main()-Funktion ist überflüssig
* in der Schleife solltest du besser nicht die Zählvariable kaputtmachen, sondern als Index im Array verwenden
* die Ausgabe fehlt noch
* delete greift auf die falsche Variable zuPS: sfds
-
Aha, du willst die Lösung:
#include <iostream> int main() { std::cout << "Elementanzahl = "; std::size_t Size; std::cin >> Size; short* Array = new short[Size]; for(std::size_t i = 0; i < Size; i++) std::cout << (Array[i] = i % 2) << ", "; delete[] Array; }
-
#include <string>
#include <iostream>
using namespace std;int main()
{
int i;
short Array[i];cout << "Wie viele Array-Elemente moechten Sie speichern? " <<flush;
cin >> i;short* arrays = new short[i];
for (int b = 0; b < i; ++b)
{
if (b % 2)
{ b = 0;
}
else
{ b = 1;
}
cout << b <<endl;
}delete[] arrays;
system ("Pause");
}
Habe es jetzt erstmal so umgeschrieben (Überflüssige noch dringelassen), aber die Ausgabe klappt noch nicht! ?
-
OK, einer von vier Kritikpunkten ist umgesetzt, der Rest ist immer noch genauso falsch wie vorher
for (int b = 0; b < i; ++b) { if (b % 2) { arrays[b] = 0; // hier wird der Inhalt des Arrays gefüllt } else { arrays[b] = 1; // bzw. hier } }Für die Ausgabe kannst du in einer zweiten Schleife über das Array laufen.
-
Sry bin noch völliger Anfänger und weiß nicht was du mit der zweiten Schleife die über das Array laufen soll meinst :-/.
-
Du weißt aber schon, was eine Schleife ist? Dann kannst du eine Schleife verwenden, um nacheinander alle Elemente des Arrays auszugeben (funktioniert so ähnlich wie das Füllen des Arrays).
-
Ich habs jetzt erstmal so probiert:
for (int i = 0; b < i; ++i)
{
cout << arrays[b] << ", " <<endl;
}aber wo hat sich der Fehler/Denkfehler eingeschlichen ?
-
Der Denkfehler besteht darin, daß du besser darauf achten solltest, welche Variable welche Aufgabe bekommen soll. Oben hast du i für die Array-Größe und b als Zähler/Index verwendet, jetzt machst du es genau umgekehrt.
(vernünftige Variablennamen könnten auch helfen - C++ erlaubt auch Bezeichner, die länger als ein Zeichen sind ;))