App installieren
How to install the app on iOS
Follow along with the video below to see how to install our site as a web app on your home screen.
Anmerkung: This feature may not be available in some browsers.
Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden.
Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
C++ Array und Zeiger
- Ersteller DCTH
- Erstellt am
DCTH
Grand Admiral Special
- Mitglied seit
- 16.03.2002
- Beiträge
- 2.057
- Renomée
- 3
- Standort
- Am Neckar
- Prozessor
- Q9550
- Mainboard
- Gigabyte P35-DS4 (Rev 1.0)
- Kühlung
- nen recht großer Scythe
- Speicher
- 8GB
- Grafikprozessor
- GTX 560ti
- Display
- HP w2207
- HDD
- 250gb
- Optisches Laufwerk
- vorhanden
- Soundkarte
- X-Fi Music
- Gehäuse
- schwarz
- Netzteil
- Bequiet Dark Power Pro 430Watt
- Betriebssystem
- Win7prof 64bit
- Webbrowser
- Firefox
Also, ich habe hier ein kleines Programm, welches ein Array in ein anderes Array an gewünschter Stelle einfügt.
Dazu wird in einer Funktion ein neues/variables Array definiert.
Dies steht im Main-Programm: Übergeben werden beide Arrays, deren Länge L1 und L2 sowie die Position vpos wo das 2te ins 1te soll.
Nun verlangt die Aufgabe, dass der Return-Wert ein Zeiger auf das neue Array ist. (Also nur dieser, nicht auch die Länge oder sonst etwas. Wobei ich die Länge auch einfach über die beiden Längen L1 und L2 ja habe).
Ich kriege es grade einfach nicht hin, dass ich dann einen Wert/Ausdruck wie auch immer bekomme, mit dem ich dann im Main-Programm eine for-Schleife zur Ausgabe des neuen Arrays schreiben kann.
hier mal noch der komplette Code, wobei ich denke den brauchts eigentlich nicht:
Danke im vorraus!
Dazu wird in einer Funktion ein neues/variables Array definiert.
Dies steht im Main-Programm: Übergeben werden beide Arrays, deren Länge L1 und L2 sowie die Position vpos wo das 2te ins 1te soll.
Code:
fuse(arr1, arr2, L1, L2, vpos);
Nun verlangt die Aufgabe, dass der Return-Wert ein Zeiger auf das neue Array ist. (Also nur dieser, nicht auch die Länge oder sonst etwas. Wobei ich die Länge auch einfach über die beiden Längen L1 und L2 ja habe).
Ich kriege es grade einfach nicht hin, dass ich dann einen Wert/Ausdruck wie auch immer bekomme, mit dem ich dann im Main-Programm eine for-Schleife zur Ausgabe des neuen Arrays schreiben kann.
hier mal noch der komplette Code, wobei ich denke den brauchts eigentlich nicht:
Code:
#include <iostream>
#include <conio.h>
using namespace std;
// arr2 mit der länge L2 soll in arr1 mit der länge L1 an der position vpos
int *fuse(int arr1[], int arr2[], int L1, int L2, int vpos)
{
int *newarr=NULL;
newarr = new int[L1+L2]; //neues array wird definiert
int r=0; //zusätzlicher zähler
vpos-=1; //weil das arr2 vor der angegebenen stelle eingefügt werden soll
for(int i=0; i<vpos; i++ , r++) //arr1 bis zuer stelle vpos in newarr einfuegen
{
newarr[i]=arr1[r];
}
cout << "DebugInfo r=" << r << endl;
r=0;
for(int i=0; i<L2; i++, r++) //arr2 komplett in newarr ab stelle vpos eintragen
{
newarr[vpos+i]=arr2[r];
}
cout << "DebugInfo r=" << r << endl;
r=0;
for(int i=0; i<=(L1-vpos); i++, r++) //arr1 ab stelle vpos in newarr ab stelle vpos+L1 eintragen
{
newarr[vpos+L2+r]=arr1[vpos+r];
}
cout << "DebugInfo r=" << r << endl;
r=0;
if(vpos<0 && vpos>L1)
return NULL;
else
return newarr;
/*cout << "\nInhalt newarr: " << endl;
for(int i=0; i<(L1+L2); i++) //debuginfo, ausgabe von newarr
cout << newarr[i];*/
}
void main()
{
int arr1[5]={1,2,3,4,5};
int arr2[3]={6,7,8};
int L1, L2, vpos, x;
L1 = sizeof(arr1)/sizeof(int);
L2 = sizeof(arr2)/sizeof(int);
cout << "\nInhalt arr1: " << endl;
for(int i=0; i<L1; i++)
cout << arr1[i];
cout << endl;
cout << "\nInhalt arr2: " << endl;
for(int i=0; i<L2; i++)
cout << arr2[i];
cout << endl;
cout << "\nStelle zum Einfuegen von arr2 in arr1 angeben ..." << endl;
cin >> vpos;
fuse(arr1, arr2, L1, L2, vpos);
//cout << x << endl;
/*cout << "\nInhalt newarr: " << endl;
for(int i=0; i<(L1+L2); i++) //debuginfo, ausgabe von newarr
cout << newarr[i];*/
_getch();
}
Danke im vorraus!
Devastators
Grand Admiral Special
- Mitglied seit
- 03.06.2001
- Beiträge
- 17.242
- Renomée
- 149
- Standort
- Bochum
- Mein Laptop
- Acer 8730 & 3810T & VN7 791G
- Prozessor
- Intel Q9550
- Mainboard
- -
- Kühlung
- Arctic Freezer 7 Pro
- Speicher
- 4* 1 Gig DC
- Grafikprozessor
- Asus GTX 750TI
- Display
- Asus VW246H 24" FHD
- SSD
- Samsung 850 EVO
- HDD
- 2 * Sata Maxtor 200GB 1 * WD 250 Gig IDE
- Optisches Laufwerk
- Plextor PX750A
- Soundkarte
- -
- Gehäuse
- Antec P180
- Netzteil
- BeQuiet 450Watt Straight Power
- Betriebssystem
- Win7 64
- Webbrowser
- IExplorer 8
- Verschiedenes
- DigiCam: Canon EOS 300D, Canon 50D , Beamer: SanyoZ3 , Camcorder: Canon HF200 HD , PS3 , Wii
PHP:
int *newarr;
newarr = fuse(arr1, arr2, L1, L2, vpos);
cout << "\nInhalt newarr: " << endl;
for(i=0; i<(L1+L2); i++) //debuginfo, ausgabe von newarr
cout << newarr[i];
meinst Du das?
Die Länge Deines neuen Arrays solltest Du nochmal überdenken, die wird i.d.R. zu groß sein
Auch sonst ist mir auf die Schnelle nicht immer klar geworden was Du da alles in Deiner Funktion machen wolltest
PHP:
r=0;
for(i=0; i<=(L1-vpos); i++, r++) //arr1 ab stelle vpos in newarr ab stelle vpos+L1 eintragen
{
newarr[vpos+L2+r]=arr1[vpos+r];
}
array1 ist drinne, array2 wird ab stelle x angefügt.
Mehr brauchst Du doch nicht ?!?
Wichtg ist übrigens VPos auf Fehleingabe abzufangen
Zuletzt bearbeitet:
DCTH
Grand Admiral Special
- Mitglied seit
- 16.03.2002
- Beiträge
- 2.057
- Renomée
- 3
- Standort
- Am Neckar
- Prozessor
- Q9550
- Mainboard
- Gigabyte P35-DS4 (Rev 1.0)
- Kühlung
- nen recht großer Scythe
- Speicher
- 8GB
- Grafikprozessor
- GTX 560ti
- Display
- HP w2207
- HDD
- 250gb
- Optisches Laufwerk
- vorhanden
- Soundkarte
- X-Fi Music
- Gehäuse
- schwarz
- Netzteil
- Bequiet Dark Power Pro 430Watt
- Betriebssystem
- Win7prof 64bit
- Webbrowser
- Firefox
Ja, genau das ... hatte nicht an "int *newarr;" ... jetzt gehts so wie ich wollte, danke.
Ich möchte ja EINfügen, nicht nur anfügen.
Also:
Zuerst wird arr1 bis zur Stelle vpos in newarr geschrieben (erste schleife in der Fkt)
Dann wird das 2te Array (arr2) in newarr eingefügt und zwar ab der Stelle, wo die vorige Schleife aufhörte (zweite Schleife)
Zuletzt muss noch der Rest des ersten Arrays (arr1) in newarr kopiert werden. Und zwar eben auf die letzten paar verbleibenden Plätze.
Deswegen wird mein neues Array auch nicht zu groß, sondern genau richtig: arr1 und arr2 sollen beide komplett (komplett != am Stück, zumindest was arr1 betrifft) in ein neues Array kopiert werden.
Das ganze ist lediglich eine Übung bzgl einfügen eines Arrays in ein anderes ... dass des nur über ein new array geht etc.
Fehleingaben sind egal ... richtig wäre es natürlich. Aber genauso würde es hier keinen Sinn machen ein variables Array zu benutzen, da mir deren Größe ja bekannt ist.
Im realistischen (nicht Übungsfall) wäre hier kein Array von vornherein bekannt und man müsste auch Fehleingaben überpfrüfen, in diesem Falle aber völlig egal.
array1 ist drinne, array2 wird ab stelle x angefügt.
Mehr brauchst Du doch nicht ?!?
Ich möchte ja EINfügen, nicht nur anfügen.
Also:
Zuerst wird arr1 bis zur Stelle vpos in newarr geschrieben (erste schleife in der Fkt)
Dann wird das 2te Array (arr2) in newarr eingefügt und zwar ab der Stelle, wo die vorige Schleife aufhörte (zweite Schleife)
Zuletzt muss noch der Rest des ersten Arrays (arr1) in newarr kopiert werden. Und zwar eben auf die letzten paar verbleibenden Plätze.
Deswegen wird mein neues Array auch nicht zu groß, sondern genau richtig: arr1 und arr2 sollen beide komplett (komplett != am Stück, zumindest was arr1 betrifft) in ein neues Array kopiert werden.
Das ganze ist lediglich eine Übung bzgl einfügen eines Arrays in ein anderes ... dass des nur über ein new array geht etc.
Fehleingaben sind egal ... richtig wäre es natürlich. Aber genauso würde es hier keinen Sinn machen ein variables Array zu benutzen, da mir deren Größe ja bekannt ist.
Im realistischen (nicht Übungsfall) wäre hier kein Array von vornherein bekannt und man müsste auch Fehleingaben überpfrüfen, in diesem Falle aber völlig egal.
Devastators
Grand Admiral Special
- Mitglied seit
- 03.06.2001
- Beiträge
- 17.242
- Renomée
- 149
- Standort
- Bochum
- Mein Laptop
- Acer 8730 & 3810T & VN7 791G
- Prozessor
- Intel Q9550
- Mainboard
- -
- Kühlung
- Arctic Freezer 7 Pro
- Speicher
- 4* 1 Gig DC
- Grafikprozessor
- Asus GTX 750TI
- Display
- Asus VW246H 24" FHD
- SSD
- Samsung 850 EVO
- HDD
- 2 * Sata Maxtor 200GB 1 * WD 250 Gig IDE
- Optisches Laufwerk
- Plextor PX750A
- Soundkarte
- -
- Gehäuse
- Antec P180
- Netzteil
- BeQuiet 450Watt Straight Power
- Betriebssystem
- Win7 64
- Webbrowser
- IExplorer 8
- Verschiedenes
- DigiCam: Canon EOS 300D, Canon 50D , Beamer: SanyoZ3 , Camcorder: Canon HF200 HD , PS3 , Wii
aso, es soll "dazwischen" gequetscht werden.... kapiert
DCTH
Grand Admiral Special
- Mitglied seit
- 16.03.2002
- Beiträge
- 2.057
- Renomée
- 3
- Standort
- Am Neckar
- Prozessor
- Q9550
- Mainboard
- Gigabyte P35-DS4 (Rev 1.0)
- Kühlung
- nen recht großer Scythe
- Speicher
- 8GB
- Grafikprozessor
- GTX 560ti
- Display
- HP w2207
- HDD
- 250gb
- Optisches Laufwerk
- vorhanden
- Soundkarte
- X-Fi Music
- Gehäuse
- schwarz
- Netzteil
- Bequiet Dark Power Pro 430Watt
- Betriebssystem
- Win7prof 64bit
- Webbrowser
- Firefox
So trivial wollt ichs nun nicht ausdrücken, aber ja!
Bin inzwischen bei der nächsten Aufgabe, nix wildes ... es soll ein Speicherblock simuliert werden und dazu ein 10x16 großes Array zufällig mit Nullen und Einsen gefüllt werden.
Aber da ist mir mal wieder aufgefallen wie unzufällig die einfache rand-Funktion ist:
Gibt natürlich jedesmal die selbe Folge von Nullen und Einsen ... ne Idee wie ich das schnell und ohne großen Aufwand aufpeppen kann? Also weg von dieser extremen Pseudo-Zufälligkeit?
EDIT: Ah habs scho .. rand sollte man mit was veränderlichem initialisieren ...
Bin inzwischen bei der nächsten Aufgabe, nix wildes ... es soll ein Speicherblock simuliert werden und dazu ein 10x16 großes Array zufällig mit Nullen und Einsen gefüllt werden.
Aber da ist mir mal wieder aufgefallen wie unzufällig die einfache rand-Funktion ist:
Code:
int sblock[16][10];
for(int i=0; i<10; i++)
{
for (int j=0; j<16; j++)
{
sblock[j][i] = rand() % 2 + 0; //die einfachste und unzufälligste Zufalls-Lösung
}
}
Gibt natürlich jedesmal die selbe Folge von Nullen und Einsen ... ne Idee wie ich das schnell und ohne großen Aufwand aufpeppen kann? Also weg von dieser extremen Pseudo-Zufälligkeit?
EDIT: Ah habs scho .. rand sollte man mit was veränderlichem initialisieren ...
Zuletzt bearbeitet:
Devastators
Grand Admiral Special
- Mitglied seit
- 03.06.2001
- Beiträge
- 17.242
- Renomée
- 149
- Standort
- Bochum
- Mein Laptop
- Acer 8730 & 3810T & VN7 791G
- Prozessor
- Intel Q9550
- Mainboard
- -
- Kühlung
- Arctic Freezer 7 Pro
- Speicher
- 4* 1 Gig DC
- Grafikprozessor
- Asus GTX 750TI
- Display
- Asus VW246H 24" FHD
- SSD
- Samsung 850 EVO
- HDD
- 2 * Sata Maxtor 200GB 1 * WD 250 Gig IDE
- Optisches Laufwerk
- Plextor PX750A
- Soundkarte
- -
- Gehäuse
- Antec P180
- Netzteil
- BeQuiet 450Watt Straight Power
- Betriebssystem
- Win7 64
- Webbrowser
- IExplorer 8
- Verschiedenes
- DigiCam: Canon EOS 300D, Canon 50D , Beamer: SanyoZ3 , Camcorder: Canon HF200 HD , PS3 , Wii
EDIT: Ah habs scho .. rand sollte man mit was veränderlichem initialisieren ...
ich habs immer mit der systemzeit gemacht.
Ähnliche Themen
- Antworten
- 757
- Aufrufe
- 98K
- Antworten
- 469
- Aufrufe
- 76K