WinFuture-Forum.de: 3x4 Matrix Als 1 Dimensionalen Vektor - WinFuture-Forum.de

Zum Inhalt wechseln

Nachrichten zum Thema: Entwicklung
  • 3 Seiten +
  • 1
  • 2
  • 3

3x4 Matrix Als 1 Dimensionalen Vektor


#1 Mitglied ist offline   centro 

  • Gruppe: aktive Mitglieder
  • Beiträge: 49
  • Beigetreten: 21. Februar 08
  • Reputation: 0

  geschrieben 21. März 2008 - 00:53

Hallo !

Also ich komme bei einer Aufgabe leider nicht weiter es geht um Vektoren.
Aufgabe: Schreiben Sie ein Programm welches aus einer 2 dimensionalen Matrix der Größe 3x4 einen 1 dimensionalen Vektor erstellt und diesen anschließend auf dem Bildschirm ausgibt. Dazu müssen Sie zunächst die Matrix wie auch den Vektor als Variablen deklarien. Die Anweisungen bzw, den Funktionsaufruf um die Matrix zu füllen, brauchen sie nicht zu schreiben.

Also ich kann ja auch eine 3x4 Matrix in einem 1 dimensionalen array[12] umwandeln die Frage: brauche das jetzt?
Wenn ich das mit dem Vektor richtig verstanden habe muss ich alle Zahlen addieren(„was ich aber umso länger ich darüber nachdenke nicht mehr glaube“ ) so das ich nur eine Zahle bekomme. Weil wenn ich von einem klassischen Vektor ausgehe den man z.B, in einem Koordinatensystem einzeichnen will, brauche ich ja x und y werte um Ihn darzustellen. Die Länge oder Radius welcher immer positive ist wir ja über den Satz des Pythagoras berechnet. Was ja nicht so wild ist. Oder kann es sein das ich einfach nur eine nten-Vektor erstellen soll und das ist dann nichts anderes als eine 3x4 Matrix in einem 1 dimensionalen array [12] umzuwandeln. Und jede Zahl stellt dann für sich einen 1-dimensionalen Vektor dar. Keine Lösung bitte aber gute Hinweise.

Dieser Beitrag wurde von centro bearbeitet: 21. März 2008 - 00:56

0

Anzeige



#2 Mitglied ist offline   centro 

  • Gruppe: aktive Mitglieder
  • Beiträge: 49
  • Beigetreten: 21. Februar 08
  • Reputation: 0

geschrieben 21. März 2008 - 18:31

Gehen wir mal davon aus das es bei dieser Aufgabe, darum geht aus einem 2 dimensionales Array[3] [4] ein eindimensionales Array[12] zu machen .
Wie kann ich die Werte am schnellsten übergeben ?
So was matrix1[0]==matrix[0][0]; klappt ja nicht muss ich da vielleicht mit Pointer arbeiten und wenn ja wie stelle ich das an.
0

#3 Mitglied ist offline   Der Kenner 

  • Gruppe: aktive Mitglieder
  • Beiträge: 566
  • Beigetreten: 30. Januar 05
  • Reputation: 0

geschrieben 22. März 2008 - 02:46

Deine letztere Vermutung ist richtig. Die Matrix hat 3*4 = 12 Elemente und die sollst du nun einfach aneinanderreihen, eben in einen eindimensionalen Vektor schreiben. Dieser eindimensionale Vektor muss also auch 12 Elemente aufnehmen können, hat daher also die Länge 12.
Die Elemente kopierst du mit dem folgenden Schema:
std::vector<Komponententyp> 2d_vektor(3, 4); // Ausgangsmatrix; bereits gefüllt
std::vector<Komponententyp> vektor(12);

for(int i=0; i<3; ++i) {
	for(int j=0; j<4; ++j) {
		vektor.push_back(2d_vektor.at(i, j));
	}
}



Erläuterung: Mit der äußeren Schleife iterierst du über die Zeilen der Matrix, mit der Inneren über die Spalten. Die "at()"-Funktion gibt jeweils das Element an der durch die Parameter gegebene Stelle zurück, welches dann mittels "push_back()" an den eindimensionalen Vektor angehängt wird.
0

#4 Mitglied ist offline   centro 

  • Gruppe: aktive Mitglieder
  • Beiträge: 49
  • Beigetreten: 21. Februar 08
  • Reputation: 0

geschrieben 22. März 2008 - 10:18

Danke.
Deinen std:: ist doch eigentlich nicht nötig ich meine man muss doch nur was in der main ändern. Was es genau ist weiß ich jetzt auch nicht aber ich glaube es hat was mit einer Bibliothek zu tun (#include....)die es ermöglicht auf schon
Vorprogrammierte befehle zugreift wie printf oder....
Das<Komponententyp> was soll das darstellen und der punkt hinter Vektor. kenne ich von struct hast
du also eine struct von vecktor <Komponententyp> Vektor(12)angelegt wenn ja interessant.
Das was mich jetzt sehr interessiert ist das Du eine for
Schleife benutzt um die Werte aus der Matrix zu überzugehen wie ein Scanner erst Zeile und Spalte.
Warum werden die Werte nicht überschrieben von i und j.
0

#5 Mitglied ist offline   Gitarremann 

  • Gruppe: aktive Mitglieder
  • Beiträge: 3.221
  • Beigetreten: 04. Juni 06
  • Reputation: 3
  • Geschlecht:Männlich
  • Wohnort:Trebnitz

geschrieben 22. März 2008 - 11:08

Nur mal interessehalber. Geht es nur darum, die Werte aus:

variable[1][1]
variable[1][2]
variable[1][3]
variable[1][4]
variable[2][1]
variable[2][2]
variable[2][3]
variable[2][4]
variable[3][1]
variable[3][2]
variable[3][3]
variable[3][4]

in:

variable_neu[1]
variable_neu[2]
variable_neu[3]
variable_neu[4]
variable_neu[5]
variable_neu[6]
variable_neu[7]
variable_neu[8]
variable_neu[9]
variable_neu[10]
variable_neu[11]
variable_neu[12]

zu schreiben? Also vom Schema her, unabhängig jetzt von der Syntax.
Der Pessimist sagt: "Das Glas ist halb leer,"
Der Optimist sagt: "Das Glas ist halb voll."
Der Realist sagt: "Bedienung, zwei Neue!"
0

#6 Mitglied ist offline   centro 

  • Gruppe: aktive Mitglieder
  • Beiträge: 49
  • Beigetreten: 21. Februar 08
  • Reputation: 0

geschrieben 22. März 2008 - 12:19

ja das hast du richtig erkannt!
Wobei ich nur anmerkennen will das die matrix bei [0][0]anfängt und der 1d_Vektro auch [0].

Dieser Beitrag wurde von centro bearbeitet: 22. März 2008 - 12:25

0

#7 Mitglied ist offline   def 

  • Gruppe: aktive Mitglieder
  • Beiträge: 386
  • Beigetreten: 19. Dezember 06
  • Reputation: 7
  • Geschlecht:Männlich

geschrieben 22. März 2008 - 12:26

Ich muss zugeben, ich bin ein bisschen irritiert. Es wäre vielleicht ganz gut, wenn Du am Anfang von möglichst jedem neuen Thread dazusagen würdest, auf welche Programmiersprache Du Dich beziehst. Nicht jeder, der bereit ist, sich mit Deinem Problem zu beschäftigen, kennt Dich zwangsläufig. :P
Ich bin beispielsweise noch auf dem Stand, dass Du C lernst, aber die Frage klingt durch die Erwähnung von "Vektor" eher ein bisschen nach C++. (In C++ werden Arrays meist durch sogenannte Vektoren ersetzt, zu sehen z.B. in der Antwort des Benutzers "Der Kenner".) Wäre nett, wenn Du das mal klären könntest.

Viele Grüße
Def
Eingefügtes Bild
0

#8 Mitglied ist offline   Gitarremann 

  • Gruppe: aktive Mitglieder
  • Beiträge: 3.221
  • Beigetreten: 04. Juni 06
  • Reputation: 3
  • Geschlecht:Männlich
  • Wohnort:Trebnitz

geschrieben 22. März 2008 - 12:31

Ist das irgendwie ne Aufgabe um die Schüler zu verarschen. Also von der Schwierigkeit der Aufgabe her ist es ja nix - also ich schätz mal Informatik 6-8 Klasse aber um die Formulierung der Aufgabenstellung zu verstehen, muß man ja studiert haben.
Also mit anderen Worten, wäre ich beim Programmieren in der Praxis auf das Problem gestoßen, wäre es eine Minutensache gewesen und ich hätte es gehabt, aber hätte man mir im Unterricht in der Theorie die Frage gestellt, hätte ich ein leeres Blatt abgeben müssen, weil ich die Aufgabe nicht verstanden hätte.

Achso - also ich fange grundsätzlich mit 1 an. Mit 0 komm ich immer durcheinander. Wenn ich 12 Arrays hab, dann muß das Letzte auch array[12] sein, sonst ist das bei mir unlogisch.

Dieser Beitrag wurde von Gitarremann bearbeitet: 22. März 2008 - 12:34

Der Pessimist sagt: "Das Glas ist halb leer,"
Der Optimist sagt: "Das Glas ist halb voll."
Der Realist sagt: "Bedienung, zwei Neue!"
0

#9 Mitglied ist offline   centro 

  • Gruppe: aktive Mitglieder
  • Beiträge: 49
  • Beigetreten: 21. Februar 08
  • Reputation: 0

geschrieben 22. März 2008 - 13:58

Ja es handelt sich um c.
Also wie geht das das ich über eine for Schleife Werte auslesen kann.

Dieser Beitrag wurde von centro bearbeitet: 22. März 2008 - 14:01

0

#10 Mitglied ist offline   def 

  • Gruppe: aktive Mitglieder
  • Beiträge: 386
  • Beigetreten: 19. Dezember 06
  • Reputation: 7
  • Geschlecht:Männlich

geschrieben 22. März 2008 - 14:53

Naja, "Der Kenner" hatte das "Geheimnis" ja nun eigentlich schon gelüftet, also kann es auch nicht schaden, Dir die Lösung zu geben. Ich hoffe, es sind keine Fehler drin. Du brauchst eben halt zwei verschachtelte for-Schleifen.
Ich hoffe, Du kannst Dir aus meinem Code die Dinge herausklauben, die Du noch nicht verstanden hast. Und sonst, wie immer, frag einfach nach!

Viele Grüße
Def

#include <stdio.h>

int main(void)
{
	int matrix[3][4] =
	{
		 { 1,  2,  3,  4 },
		 { 5,  6,  7,  8 },
		 { 9, 10, 11, 12 }
	};
	int vektor[12];
	int i, j;	/* Zaehler fuer die beiden verschachtelten Schleifen */
	int k = 0;	/* unabhaengiger Zaehler fuer den Vektor */

	/* Array in Vektor kopieren: */
	for(i=0; i<3; i++)
		for(j=0; j<4; j++)
		{
			vektor[k] = matrix[i][j];
			++k;
		}

	/* Vektor ausgeben: */
	for(i=0; i<12; i++)
		printf("vektor[%d]:\t%2d\n", i, vektor[i]);
	putchar('\n');

	return 0;
}

Eingefügtes Bild
0

#11 Mitglied ist offline   Der Kenner 

  • Gruppe: aktive Mitglieder
  • Beiträge: 566
  • Beigetreten: 30. Januar 05
  • Reputation: 0

geschrieben 22. März 2008 - 15:00

Natürlich handelt es sich um C... :P
T matrix [3][4]; // Ausgangsmatrix; bereits gefüllt
 T vektor [12];
 
 int i=0, j=0, k;
 while(j<3) {
	k=0;
	 while(k<4) {
		 vektor[i++] = matrix[j][k++];
	 }
	++j;
}


@Gitarremann: Wie viel eindeutiger willst du es noch haben?

Zitat

aus einer 2 dimensionalen Matrix der Größe 3x4 einen 1 dimensionalen Vektor erstellt und diesen anschließend auf dem Bildschirm ausgibt

Matrix: zweidimensionales Array, wie auch schon in der Aufgabe gezeigt
Alle Elemente sollen übertragen werden, also hat der eindimensionale Vektor die Länge 3*4=12. Die Ausgabe sollte ja noch das geringste Problem sein.

Zitat

also ich fange grundsätzlich mit 1 an.

Damit verschenkst du allerdings jedes mal den Speicher für die Position 0. Und anderen ist das vllt. nicht so ganz logisch.

@def: Ah, du warst wohl ein bisschen schneller. Naja, dann biet ich eben was Alternatives an. :P

Zitat

"Der Kenner" hatte das "Geheimnis" ja nun eigentlich schon gelüftet

Ja, ich weiß, ich bin ein Spielverderber...

Bearbeitungsgrund: Ausbesserung eines schändlichen Fehlers.

Dieser Beitrag wurde von Der Kenner bearbeitet: 22. März 2008 - 16:29

0

#12 Mitglied ist offline   def 

  • Gruppe: aktive Mitglieder
  • Beiträge: 386
  • Beigetreten: 19. Dezember 06
  • Reputation: 7
  • Geschlecht:Männlich

geschrieben 22. März 2008 - 15:21

Beitrag anzeigenZitat (Der Kenner: 22.03.2008, 15:00)

@def: Ah, du warst wohl ein bisschen schneller. Naja, dann biet ich eben was Alternatives an. ;)

Ich bevorzuge ja vollständige Programme anstatt Code-Ausschnitte. Dann kann ich meine Kreationen auch mal testen und vermeide solche Patzer ( :) ) wie in Deinem Code:
while(j<3) {
	while(k<4) {
		vektor[i++] = matrix[j][k];

wo Du vergessen hast, j und k zu erhöhen (for-Schleifen haben eben doch Vorteile...). Tjaja... ;)
Und das große T (für Type, nehme ich mal an) gibt es so eben nicht in C. Derartige Missverständnisse kann man durch vollständige Programme vermeiden. ;)
Aber mal im Ernst, ich hab schon vor langer Zeit mit C++ angefangen, komme aber nicht so recht weiter. Mir fehlt immer die Motivation zum Weiterlernen. Naja, irgendwann...

Zitat

Ja, ich weiß, ich bin ein Spielverderber...

Ha, war mir doch ganz recht! Es ist, finde ich, tatsächlich einfacher, die Lösung zu posten, als Tipps zu geben, ohne die Lösung zu verraten. (Und das ist keine Ironie.)

Viele Grüße
Def
Eingefügtes Bild
0

#13 Mitglied ist offline   Gitarremann 

  • Gruppe: aktive Mitglieder
  • Beiträge: 3.221
  • Beigetreten: 04. Juni 06
  • Reputation: 3
  • Geschlecht:Männlich
  • Wohnort:Trebnitz

geschrieben 22. März 2008 - 15:49

Beitrag anzeigenZitat (Der Kenner: 22.03.2008, 15:00)

@Gitarremann: Wie viel eindeutiger willst du es noch haben?

Zitat

aus einer 2 dimensionalen Matrix der Größe 3x4 einen 1 dimensionalen Vektor erstellt




Ja das mag eindeutig sein, wenn man die ganzen Wörter kennt. Ich kenne sie nicht. Matrix ist für mich ein Kinofilm (den ich aber auch nur vom Namen her kenne) und Vektor ist für mich ein Pfeil der in der Physik eine vektorielle Größe grafisch darstellt bzw. ist Vektor für mich die Kurzform von "Sesam öff'ne dich" (Weg Tor!)
Der Pessimist sagt: "Das Glas ist halb leer,"
Der Optimist sagt: "Das Glas ist halb voll."
Der Realist sagt: "Bedienung, zwei Neue!"
0

#14 Mitglied ist offline   Der Kenner 

  • Gruppe: aktive Mitglieder
  • Beiträge: 566
  • Beigetreten: 30. Januar 05
  • Reputation: 0

geschrieben 22. März 2008 - 16:26

Zitat

vermeide solche Patzer

Ich schäme und verbessere mich :) Hab ich bei der Umwandlung wegfallen lassen...

Zitat

Und das große T (für Type, nehme ich mal an) gibt es so eben nicht in C.

Auch in C++ muss das letztendlich mit einem konkreten Typen ersetzt werden, um damit arbeiten zu können. Und da nie was über den Komponententyp erzählt wurde, hab ichs mal allgemein gehalten.

Zitat

einfacher, die Lösung zu posten, als Tipps zu geben, ohne die Lösung zu verraten.

In dem Fall sehe ich das auch so. Deswegen war das vorher auch keine Ironie.

Zitat

Ja das mag eindeutig sein, wenn man die ganzen Wörter kennt.

Wie bei so vielem dreht es sich auch immer nur um ein paar Schlagworte. Und die sind rasch gelernt und ihre Hintergründe begriffen. ;)

Zitat

Vektor ist für mich ein Pfeil der in der Physik eine vektorielle Größe grafisch darstellt

Die grafische Darstellung ist davon erstmal unabhängig. Ein Vektor ist in der Physik eine gerichtete Größe, die einen Betrag hat und eine Richtung (-> gerichtet).

Dieser Beitrag wurde von Der Kenner bearbeitet: 22. März 2008 - 16:34

0

#15 Mitglied ist offline   Gitarremann 

  • Gruppe: aktive Mitglieder
  • Beiträge: 3.221
  • Beigetreten: 04. Juni 06
  • Reputation: 3
  • Geschlecht:Männlich
  • Wohnort:Trebnitz

geschrieben 22. März 2008 - 16:29

Beitrag anzeigenZitat (Der Kenner: 22.03.2008, 16:26)

Wie bei so vielem dreht es sich auch immer nur um ein paar Schlagworte. Und die sind rasch gelernt und ihre Hintergründe begriffen. ;)


Nee C++ begreif ich selbst mit Buch und Lernen nicht. Hab schon mehrere Anläufe genommen. Jetzt hab ich es aber aufgegeben. Das hat keinen Zweck. Ich bleib bei Visual Basic 6. Das ist logisch.
Der Pessimist sagt: "Das Glas ist halb leer,"
Der Optimist sagt: "Das Glas ist halb voll."
Der Realist sagt: "Bedienung, zwei Neue!"
0

Thema verteilen:


  • 3 Seiten +
  • 1
  • 2
  • 3

1 Besucher lesen dieses Thema
Mitglieder: 0, Gäste: 1, unsichtbare Mitglieder: 0