Dies ist eine statische Kopie unseres alten Forums. Es sind keine Interaktionen möglich.
This is a static copy of our old forum. Interactions are not possible.

francis-nano

Praktikant

  • "francis-nano" started this thread

Posts: 7

Date of registration: Jul 3rd 2012

1

Tuesday, July 3rd 2012, 1:34pm

C++ 3 Testat

Hallo,

ich bin Student der Nanotechnologie und wie haben im Moment Informationstechnisches Praktikum.

Wir erlernen also C++

Leider habe ich im letzten Testat einen kleinen Fehler gehabt und darf deshalb ins dritte Testat.

So, nun mein Problem, von zweiten zum dritten Testat sind gefühlte 500 neue Befehle dazugekommen.

Wir müssen aufeinmal ganze Karteiprogramme erstellen. Die Aufgaben werden so komplex, dass ich total überfordert bin.

Falls mir jemand irgendwie durch Tipps helfen könnte, wäre das super nett :)

LG

SammysHP

Forenwolf

  • "SammysHP" is male

Posts: 712

Date of registration: Oct 11th 2010

Location: Celle

Occupation: Informatiker

2

Tuesday, July 3rd 2012, 5:11pm

Dazu solltest du Fragen stellen, ansonsten können wir dir auch nicht weiterhelfen. ;)

francis-nano

Praktikant

  • "francis-nano" started this thread

Posts: 7

Date of registration: Jul 3rd 2012

3

Tuesday, July 3rd 2012, 6:19pm

Quoted

" Schreiben Sie eine Funktion matrixEinlesen(). Fragen Sie den Benutzer in

dieser Funktion, wie viele Zeilen und Spalten die Matrizen haben sollen. Diese

Funktion soll den Pointer auf die Matrix an die aufrufende Funktion zurückgeben

und hat zwei Pointer auf Integer Variablen als Übergabeparameter, in diesen

Variablen sollen die Anzahl der Zeilen und Spalten gespeichert werden. Die

Funktion soll die Matrix vom Benutzer einlesen.

Legen Sie im Hauptprogramm drei Variablen an, die eine 2 Dimensionale Integer-

Matrix speichern können. Lesen Sie 2 Matrizen mit der Funktion

matrixEinlesen ein."
Das ist zB unsere Aufgabe.
Mal abgesehen, dass ich schon Probleme mit den DoppelPointern (z.B. int **) habe, weiß ich nicht genau was in der Main-Funktion stehen muss.

So soll die MatrixEinlesen() aussehen:

Source code

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
int** matrixEinlesen(int *m, int *n){
	int **a;
	int i,j;
	printf("Bitte geben Sie an wie viele Zeilen die Matrix haben soll: ");
	scanf("%i", m);
	printf("Bitte geben Sie an wie viele Spalten die Matrix haben soll: ");
	scanf("%i", n);
	a=malloc(*m * sizeof(int*));
	for(i=0;i<*m;i++){
		a[i]=malloc(*n*sizeof(int));
	}
	for(i=0;i<*m;i++){
		for(j=0;j<*n;j++){
			printf("(%4i/%4i) = ",i,j);
			scanf("%i",&a[i][j]);
		}
	}
	return a;
}  
Was genau bewirkt hier das int **a und das int** am Anfang der Funktion und vorallem wie Funktioniert die Main?

Danke im voraus :):)

This post has been edited 1 times, last edit by "Jasinai" (Jul 3rd 2012, 6:35pm) with the following reason: [code]-Formatierung


nano

Alter Hase

  • "nano" is male

Posts: 146

Date of registration: Oct 11th 2010

Location: Hannover

Occupation: THI

4

Tuesday, July 3rd 2012, 6:49pm

zu int**:

Der int** ist ein Zeiger auf ein int* und soll hier ein Array aus int* darstellen. Jedes Element darin soll wieder ein Array sein, deshalb int*. Erst diese Zeiger zeigen dann auf (mehrere) int.
Pro "Dimension" des Arrays kommt also eine Arraystufe dazu, was du so ausdrückst, dass du statt des Arrays einen Zeiger auf mehrere Arrays (und damit wiederum ein übergeordnetes Array) hast.
int** ist also ein 2d-Array, eine Matrix.
int** a; deklariert erstmal eine Zeigervariable, die nicht initialisiert ist. In Zeile 8 wird ein Array angelegt, auf das a dann zeigt, der benötigte Speicherplatz ist dafür genau m * (sizeof(int*)), so dass m Zeiger auf die Zeilen bzw. Spalten reinpassen. Die werden dann aber erst in Zeile 9 und 10 mit jeweils int-Arrays initialisiert.


zu main:

main() muss so arbeiten:
{
int m;
int n;
matrixEinlesen(&m, &n);
}

Mit & übergibst du die Adressen der Stackvariablen m und n.
Diese haben natürlich beide den Typ int*, also erhält matrixEinlesen tatsächlich die Adressen von m und n, so dass du sie innerhalb der Funktion "nach außen" überschreiben kannst.
Und zwar werden sie durch scanf überschrieben.

Was in dem Ausschnitt von main noch fehlt, ist, dass du den Rückgabewert von matrixEinlesen speicherst und weiterverarbeitest.

Viel Erfolg,

Martin