tast-Eingabe_(Vektor)Skalar-produkt

Status
Nicht offen für weitere Antworten.

Java_Cup

Mitglied
Hallo!
Als erstes:Ich weiß, dass es für viele oder die meisten eine megeleichte "Aufgabe", ich steh ja noch am ANfang,!
Also ich habe so angefangen:
das Programm muss so aussehen:
Beispiel:
Bitte geben Sie die Dimension der Vektoren ein:2
Bitte geben Sie v1 [0] ein:1
Bitte geben Sie v1 [1] ein:2
Bitte geben Sie v2 [0] ein:3
Bitte geben Sie v2 [1] ein:4
Das Skalarprodukt🙁1,2) und (3,4) ist :11

So das klingt und ist eigentlich auch ziemlich einfach , aber da es per Tastaturangabe ist, habe ich da ein wenig Probleme:

Code:
import java.io.InputStreamReader;

public class Skalarprodukt {
	

	public static void main (String[]args){
		
		int n;            //variable für Dimension
		int S[][];
		System.out.print("Bitte geben Sie die Dimension der Vektoren ein: ");
		n=Eingabe();//Dimension
		
		S=new int [n][n];
		
		int e = 0;int k = 0;
		for (int i=0;i<S.length;i++)
			for (int j=0;j<S[i].length;j++){
				
				System.out.println(" Bitte geben sie für v"+i+"["+j+"] ein: ");
		S[i][j]=e;
		
		e=Eingabe();
		
			}
		for (int i=0;i<S.length;++i)
		
			for (int j=0;j<S[i].length;j++)
		{
			
	///////////////////////////////////////UND DA WEIß ICH NET MEHR WEITER :( ////////////////////////////////
	System.out.println(S[i][j]);}
			
		
	}
	
	
	
		
		static int Eingabe()//Zugehِriger Code der Tastatureingabe
		{
			String s="";
			try{s=new java.io.BufferedReader(
				  new InputStreamReader(System.in)).readLine();}
			catch (java.io.IOException e){}
			return java.lang.Integer.parseInt(s);
			}
		
	}


P.S: ich erwarte keine KOMPLETTE Lösung, ich will eifach nur nen kleinen "Denkanstoß"!
Danke
 
Hab's mal getestet. Sieht doch schon mal gar nicht so schlecht aus. Aber mal eine Frage: wo genau iss'
denn jetzt Dein Problem... Weisst Du nicht, wie Du die Vektoren ausgeben sollst... ?
 
ja es läuft schon, aber ich muss das Programm so umschreiben dass ich die lösung bekomme!
Also 11, bei diesem Beispiel!
Bei 2 Dimensionen wäre es so:
EINGABE:
1
2
3
4

Skalarprodukt ist dann : 1 * 3 +2 * 4 =11;
ich weiß jetzt nicht wie ich den algorithmus schreiben soll, dmit ich die 11, bekomme!
 
Du hast da einen kleinen Schussel-Fehler:
Code:
e=Eingabe(); // und dann erst den Wert im Array setzen...
S[i][j]=e;
Also ich weiss jetzt auch nicht so genau, wie ich Dir helfen kann, ohne zuviel zu verraten...
Aber Du musst die Werte mit den geschachtelten for-Schleifen berechnen. ...
[edit] Sorry, das war gerade voll daneben... Hab's geloescht...
 
Okay, jetzt hab' ich's (hab die Loesung hier - poste sie aber nicht - willst's ja selber rauskriegen)
Also noch ein kleiner Tip - Du musst auf jeden Fall die for-Schlefen verwenden - iss ja auch klar bei
Arrays... Du mussts aber eben so schreiben, dass er immer zuerst alle i's multipliziert und dann alle j's
addiert...
Falls es nicht klappt, dann meld' Dich... :wink:
 
Du brauchst temporaere Variablen, die Du dann immer mit den aktuellen Daten fuellst und miteinander
addierst/multiplizierst... Vielleicht geht's auch ohne, aber so ist's am Einfachsten.
(iss schwer, wenn man nicht zuviel sagen darf...)
 
also ich habe das jetzt umgeschrieben!
aber es kommt nur die anzahl der eingegebenen Elemente. also 4
und ich habe versucht dies "irgendwie" zu multipl. und dann zu addieren !Das problem ist nur dass es außer dem Block bzw. der geschweiften Klammer nicht geht!
 
Also hier mal ein Teil meines Codes...
Code:
for (int i=0;i<S.length;++i)  {
      for (int j=0;j<S[i].length;j++)  {
          val = S[j][i];
          ...// hier die Multiplikation
      }
      ... // hier die Addition
}
Die Ausgabe ist dann...
Bitte geben Sie die Dimension der Vektoren ein: 2
Bitte geben sie für v0[0] ein: 1
Bitte geben sie für v0[1] ein: 2
Bitte geben sie für v1[0] ein: 3
Bitte geben sie für v1[1] ein: 4
Vektor 0: 13 --> 3
Vektor 1: 24 --> 8

Skalarprodukt: 11
Hilft das ... :?
 
also ich habe das so, schon gemacht!
es kommt das richtige raus aber...
halt nur bei 2 Dimensionalen:


Code:
for (int i=0;i<S.length;++i)  { 
      for (int j=0;j<S[i].length;j++)  { 
          val = S[j][i]; 
         val=S[0][0]*S[1][0]; //Multi.
           val2=val+(S[0][1]*S[1][1]);   //Add.+Multi.   } 
      .
}

ich bin noch am probieren.... ???:L


@roar:
ja ich wollt das machen,stört ein bisschen wenn es zu groß ist...
 
Was sollen denn die 1er und 0er da??? :noe:
Ganz, ganz schnell weg damit! Um's flexibel - fuer groessere Dimensionen zu machen, darfst
Du nur mit i und j arbeiten.
Noch ein kleiner Tip: ein paar mehr temporaere Variabeln helfen bestimmt... :wink:
 
Ja, natürlich - kann ja jeder so machen wie es ihm am besten passt 😉

Vielleicht fällts dir auch einfacher wenn du zwei Arrays machst (eindimensional), je eins für einen Vektor.

Du brauchst eigentlich keine zwei for Schleifen, die Dimensionen beider Vektoren müssen ja gleich sein (für Skalarprodukt), dann reicht eine Schleife.
 
Was meinst Du mit "eine Schleife"? Du musst die Felder doch unterschiedlich hochzaehlen. Ansonsten hast
Du doch immer array[0][0], array[1][1] und array[2][2]. So kannst Du doch nie alle Felder berechnen, oder...
 
Zur Veranschaulichung zwei eindimensionale Felder :

v1 = (x1 x2)

v1[0] = x1;
v1[1] = x2;

v2 = (y1 y2);
v2[0] = y1;
v2[1] = y2;

Kann man natürlich "beliebig" erweitern.

Nun rechnest du erg = v1[0] * v2[0] , erg += v1[1] * v2[1] etc.
Dafür brauchst du nur eine Schleife.
 
Java_Cup hat gesagt.:
Code:
		int S[][];
.......	
		static int Eingabe()//Zugehِriger Code der Tastatureingabe
		{
			String s="";
			try{s=new java.io.BufferedReader(
				  new InputStreamReader(System.in)).readLine();}
			catch (java.io.IOException e){}
			return java.lang.Integer.parseInt(s);
			}
		
	}

Btw. Variablennamen werden klein geschrieben, ebenso Methodennamen.
Aussderm sieht die Methode so noch nicht "schön" aus...

Vielleicht hilft dir ja obige Beschreibung um einen passenden Ansatz zu finden.
 
Code:
import java.io.InputStreamReader;

/*
 * Created on 12.03.2005
 *
 * TODO To change the template for this generated file go to
 * Window - Preferences - Java - Code Style - Code Templates
 */

/**
 * @author Salaam_Ocean
 *
 * TODO To change the template for this generated type comment go to
 * Window - Preferences - Java - Code Style - Code Templates
 */
public class bfb {
public static void main (String[]arfs){
	

		
		int n;//Dimension
		int S[][];
		System.out.print("Bitte geben Sie die Dimension der Vektoren ein: ");
		n=Eingabe();//Dimension
		
		S=new int [n][n];
		
		int e = 0;int val=0;int val2 = 0;int  ergebnis=0,val4=0;
		int val5;
		int val3 = 0;
		for (int i=0;i<S.length;i++)
			for (int j=0;j<S[i].length;j++){
				
				System.out.println(" Bitte geben sie für v"+i+"["+j+"] ein: ");
				e=Eingabe();
				
				S[i][j]=e;}

//////////////////////////////-------------------------------------------///////////////////////////////////
		for (int i=0;i<S.length;i++)
			for(int j=0;j<S[i].length;j++){
				
				val=S[i][j];
				val2=S[i+1][j];
				val3=(val*val2)+val3;
				
				val5=val3;
				
				System.out.println("Das Skalarprodukt: |"+val+"| *  |"+val2+"| ist:    "+val5);
/////////////////////////////////------------------------------------------------------/////////////////////////////////////////


			
			}
			}		
		static int Eingabe()//Zugehِriger Code der Tastatureingabe
		{
			String s="";
			try{s=new java.io.BufferedReader(
				  new InputStreamReader(System.in)).readLine();}
			catch (java.io.IOException e){}
			return java.lang.Integer.parseInt(s);
			}
		
	}
ab da komm ich net weiter 🙁
 
Also:
1) Klassennamen werden groß geschrieben
2) Methodennamen klein geschrieben

Code:
return java.lang.Integer.parseInt(s);
Was ist mit der NumberFormatException ? Die musst du auch abfangen...

Ich würde dir empfehlen tatsächlich mit zwei eindimensionalen Arrays zu arbeiten, da du scheinbar noch nicht so geübt im Umgang mit zweidimensionalen Arrays bist.

Code:
		int[] v1 = new int[2];
		int[] v2 = new int[2];
...
//Spar mir jetzt das einlesen, dadran liegt es ja nicht...
  		v1[0] = 1;
		v1[1] = 2;
		v2[0] = 3;
		v2[1] = 4;

		int sum = 0;
		
		for(int i = 0;i < v1.length && i < v2.length;i++) 	 
			sum += v1[i]*v2[i];

Müsste eigentlich so gehen....
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben