Array spaltenweise durchsuchen

ania

Grünschnabel
Hallo,

ich habe ein Array namens bfeld[3][99], dass aus vier Spalten und 100 Zeilen besteht. Die ersten drei Spalten stehen jeweils für die x,y und z-Komponenten eines B-Feldes, dessen Betrag in der vierten Spatle meines Arrrays steht. Ich habe also eine Matrix in der der Betrag und die Koordinaten für mein B-Feld drinstehen (x,y,z,B). Außerdem habe ich noch drei Zahlen A, B, C (das können jetzt beliebige Zahlen sein). Was ich gerne machen möchte ist:
1. nur die erste Spalte meines Arrays nach der selben Zahl wie A zu durchsuchen
2. nur die zweite Spalte meines Arrays nach der selben Zahl wie B zu durchsuchen
3. nur die dritte Spalte meines Arrays nach der selben Zahl wie C zu durchsuchen

und die Ausgabe soll dann eine Zahl aus der vierten Spalte (wo der Betrag meines B-Feldes) drin steht sein. Ich möchte also, dass für jedes A, B, C, die passende Zahl für das B-Feld aus der vierten Spalte des Arrays ausgegeben wird.

Da die Zahlen A, B, und C ,wie schon gesagt beliebige Zahlen sein können, und somit die Gefahr besteht, dass ich keine passende Zahl dazu in meinem Array finden kann, möchte ich bei meiner Suche eine minimale Abweichung "sigma" einbauen, die es mir erlaubt einen Werte z.B. A+sigma (oder B+sigma, oder C+sigma) in dem Array als Ausweichlösung zu finden. Sprich, falls sich z.B. in der ersten Spalte meines Arrays kein Wert findet, der ==A ist, so kann auf ein Wert ==( A+sigma) zurückgegriffen werden.

Ich habe zwar im Internet ein paar Vervahren wie z.B. binarysearch gefunden, konnte aber für das was ich vorhabe nicht viel damit anfangen. Ich weiß nicht mal, ob die Art und Weise, wie ich mein Array durchsuchen möchte überhaupt möglich ist. Ich hoffe, dass mir da jemand helfen kann,. da ich im Bereich durchsuchen von Arrays keine Erfahrung habe. Ich wäre wirklich sehr dankbar für eure Hilfe.


P.S.:Falls ich mich irgendwo noch ungenau ausgedrückt habe, kann ich ruhig noch mehr ins Detail gehen.

Viele Grüße,
ania
 
P.S.:Falls ich mich irgendwo noch ungenau ausgedrückt habe, kann ich ruhig noch mehr ins Detail gehen.
Ja, bitte. Wenn man ein Array int a[3] hat, dann hat dieses Array nur drei Felder: [0], [1], [2]. Aber du sagtest vier. Außerdem habe ich die Fragen nicht ganz verstanden, aber ich lese sie mir auf jeden Fall nochmal durch.
 
Hi,
ja ihr habt recht *schäm*, es muss bfeld [4][100] heißen.Ich habe da etwas verwechselt gehabt. Sorry. Da ich mich wie bereits geahnt etwas unverständlich ausgedrückt habe starte ich gerne einen zweiten Versuch.
Also nehmen wir mal an, ich hätte eine kleine Matrix (die Werte sind jetzt frei erfunden), wie z.B. diese: test [4][5]
x y z BF
1,1 1,1 1 6
2,1 2 2,2 4
3,2 3 3,1 8
4 4 4,2 3
5,3 5 5,3 2

Wie ich zur Übersicht darüber geschrieben habe, stehen in der ersten Spalte alle Werte für die x-Koordinaten, in der zweiten Spalte die Werte für die y-Koordinaten und in der dritten Spalte die Werte für die z-Komponente. In der vierten Spalte steht ein Wert für BF. Somit habe ich z.B. für x=2,1, y=2 und z=2,2 den Wert BF=4.
Zusätzlich habe ich noch drei weitere Werte A, B, C, (die eigentlich auch x,y,z-Koordinaten entsprechen)die jedes mal einen anderen Wert haben können. Ich möchte mein Array für jedes neue A (B oder C) dann halt immer wieder von neu durchsuchen. Die Suche soll wie folgt geschehen:
In der Spalte wo die x-Werte drinstehen, möchte ich einen Wert finden, der dem Wert von A entspricht.
Beispiel: Für A=2,1, findet sich gleich in der zweiten Zeile von der ersten Spalte der selbe Wert. Ich möchte also NUR in der ersten Spalte nach Werten suchen, die gleich A sind und NUR in der zweiten Spalte nach Werten suchen, die gleich B sind usw.
Wenn ich nun ein A=2,1 , ein B=2 und ein C=2,2 in meinem Array gefunden habe, dann möchte ich den dazugehörigen BF-Wert (BF=4) aus der vierten Spalte als Ausgabe BF bekommen.
Da es aber sein kann dass z.B. mein A= 5 ist, es in der ersten Spalte aber nur eine 5,3 gibt, möcht ich eine Art tolerierbare maximale Abweichung von z.B. +-0,5 definieren, damit die Suche trotzdem erfolgreicht ist. Mit anderen Worten, wenn ich nach einem Treffer in meinem Array für A=5 suche, möchte ich, dass 5,3 auch als Treffer gesehen wird, weil die Ziffer 5,3 nur um 0,3 von meinem A=5 abweicht, und ich das als tolerierbar definiert habe. Dieselbe Abweichung soll dann auch für B und C gelten.

Hintergrund der ganzen Programmierung ist, dass ich die magnetische Kraft auf ein Partikel berechnen möchte, dass sich mit einer Strömung bewegt. Dabei entsprechen die Werte von A,B,C den x,y,z-Komponetnen bzw. den Koordinaten meines Partikels. Diese verändern sich daher, da sich das Partikel wie schon gesagt mit der Strömung bewegt und somit nicht auf der selben Stelle bleibt. Ich möchte die Laufbahn dieses Partikels mit einer magnetischen Kraft, dass sich im Raum (x,y,z) um das Partikel herum befindet, beeinflussen. Dieses B-Feld hat zu jeden Koordinaten einen Betrag, den ich dann in meiner Kraftrechnung einbringen muss. Um zu wissen welchen Betrag von BF ich nun genau brauche, muss ich halt immer wissen wo mein Partikel ist, und den Betrag vom B-Feld hernehmen, dessen Koordinaten genau den Koordinaten des Partikels entsprechen. Eigentlich benutzte ich eine Simulationssoftware, die mir auch immer die neuen Werte von A,B und C gibt, um die Bewegung des Partikels zu simulieren. Um das magnet. Feld mit einzubringen, muss ich aber leider ein benutzerspezifisches Programm schreiben und die Sprache in der die Programme für diese Simulationssoftware geschrieben werden ist nunmal C.

Ich hoffe, dass ich es jetzt etwas besser erklären konnte. Ansonsten bei mir nachhacken. Und vielen Dank nochmal, für eure Unterstützung!

Viele Grüße,
ania
 
WieMCoder sagte iterier einfach in eienr Schliefe jede Spalte durch.

Und um deine Abweichung zu finden prüfe einfach ob der Betrag von der Differenz von A (oder B oder C) mit der Zahl kleiner gleich deinem Sigma ist. Und speicher für jeden Schritt das aktuelle Minimum.

Grüße
 
Hallo,

also ich konnte das Problem mit dem Durchsuchen einer Matrix bisher super lösen. Nun habe ich leider ein weiteres kleines Problem. Ich möchte nämlich die Werte für mein Array aus einer Text Datei namens "B_data.txt" zeilenweise herauslesen und in gradB[j][k] speichern. Mein C-Code sieht folgendermaßen aus:
Code:
#include <stdio.h>

int main ()
{
	int rows,columns,j,k;
	rows = 3;
	columns = 6;
	FILE* fp;                          /* pointer to the txt file */
	int gradB[j][k];

fp = fopen("B_data.txt","r");

	for(j = 0; j < rows; j++)                                   /* Zeilen durchlaufen */
{
		for(k = 0; k < columns; k++)                /* Spalen durchlaufen */
  	{
        	fscanf(fp, "%f", &gradB[j][k]);
}}
    
	  printf("%d\n",gradB[1][1]);                      /* hier möchte ich als Test das erste Element der Matrix ausgegeben bekommen */

}

Der Code lässt sich fehlerfrei kompilieren (xemacs), nur leider bekomme ich beim Ausführen (in der Konsole) immer folgende Fehlermeldung : "Speicherzugriffsfehler". Ich kann mit dieser Fehlermeldung leider überhaupt nichts anfangen. Ich wäre wirklich sehr dankbar, falls mir da jemand helfen kann. Der Inhalt der Text Datei sieht so aus:
1 2 3 4 5 6
2 3 4 5 6 7
3 4 5 6 7 8

Das hier ist jetzt aber nur eine kleine Test_Matrix. Später sollen da eigentlich keine integer Werte drin stehen, sondern double Werte.

Viele Grüße,
ania
 
Benutze doch bitte die Tags.
Zum Code:
Code:
int gradB[j][k];

Hier haben weder j noch k einen Wert zugeordnet bekommen. Meintest du rows und colums?

Gruß,

badday
 
Zurück