Registrierung Kalender Mitgliederliste Teammitglieder Suche Häufig gestellte Fragen Zur Startseite

Informatiker Board » Themengebiete » Praktische Informatik » Vektoren vergleichen in C » Hallo Gast [Anmelden|Registrieren]
Letzter Beitrag | Erster ungelesener Beitrag Druckvorschau | An Freund senden | Thema zu Favoriten hinzufügen
Neues Thema erstellen Antwort erstellen
Zum Ende der Seite springen Vektoren vergleichen in C
Autor
Beitrag « Vorheriges Thema | Nächstes Thema »
Tergo
unregistriert
Vektoren vergleichen in C Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Hallo liebes Informatikerboard, habe mich gerade neu angemeldet smile

Habe folgende Aufgabe vor mir:

Ich soll ein Programm schreiben, welches die Länge der Vektoren in folgender Form vergleich: V1=(X1,X2,X3), V2=(Y1,Y2,Y3).
Das Programm soll das Ergebnis in folgender Form darstellen:|V1| > |V2| or |V1| < |V2| or |V1| = |V2|
Die Vektoren sollen in 2 Arrays eingetragen werden. Der Vergleich der Vektorenlänge soll durch folgende Funktion durchgeführt werden: int compVecLen(int v1[], int v2[])


Habe dann folgenden Ansatz gewählt:

#include <stdio.h>

int compVecLen(intv1[], intv2[]); char result;
int main()

{

int v1[3]={X1,X2,X3};
int v2[3]={Y1,Y2,Y3};

printf("Enter the values of Vector 1");
scanf("%d",&X1);
scanf("%d",&X2);
scanf("%d",&X3);

printf("Enter the values of Vector 2");
scanf("%d",&Y1);
scanf("%d",&Y2);
scanf("%d",&Y3);

amountv1=sqrt(X1*X1+X2*X2+X3*X3);
amountv2=sqrt(Y1*Y1+Y2*Y2+Y3*Y3);

result=compVecLen();

printf("The larger vector is %d", result);
return 0;

}

int compVecLen(int v1[3]={X1,X2,X3}, int v2[3]={Y1,Y2,Y3});

{

if(amountv1<amountv2)
{
return v2;
}

if(amountv1>amountv2)
{
return v1;
}

if(amountv1==amountv2)
{
return noone;
}

}


Was könnt ihr mir bisher dazu sagen? Würde mich über eine Rückmeldung freuen smile
20.06.2016 11:19
eulerscheZahl eulerscheZahl ist männlich
Foren Gott


Dabei seit: 04.01.2013
Beiträge: 2.859

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Hast du schonmal versucht, das zu kompilieren?
  • Die Variablen X1,X2,X3,Y1,Y2,Y3 sind nicht definiert
  • Wenn du in ein Array einlesen willst, kann du es nicht mit Variablen füllen und danach den Variablen einen Wert zuweisen
  • sqrt ist nicht definiert, wenn du nicht math.h einbindest
  • Die Berechnung der Länge solltest du in compVecLen machen
  • v1 und v2 sind kein int, also nicht der passende Rückgabetyp
  • was soll noone sein?


__________________
Syntax Highlighting fürs Board (Link)
20.06.2016 11:30 eulerscheZahl ist offline Beiträge von eulerscheZahl suchen Nehmen Sie eulerscheZahl in Ihre Freundesliste auf
Tergo
unregistriert
Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Hallo eulerscheZahl,

vielen Dank für die schnelle Rückmeldung!

Habe jetzt den Math-Fehler schon mal beseitigt und die eigentliche Rechnung mit in die compVecLen Funktion geschrieben. In der main habe ich jetzt noch if-Statements hinzugefügt, damit die Aufgabenstellung besser passt.

Habe die Variablen X1,X2,... als Integer oben deklariert, genauso wie v1 und v2.

Wenn aber im Array keine Variable eingesetzt werden kann, wie gehe ich dann vor?

#include <stdio.h>
#include <math.h>

int compVecLen(int v1[], int v2[]); char result;
int X1,X2,X3,Y1,Y2,Y3;
int v1,v2;
int main()

{

int v1[3]={X1,X2,X3};
int v2[3]={Y1,Y2,Y3};

printf("Enter the values of Vector 1");
scanf("%d",&X1);
scanf("%d",&X2);
scanf("%d",&X3);

printf("Enter the values of Vector 2");
scanf("%d",&Y1);
scanf("%d",&Y2);
scanf("%d",&Y3);


result=compVecLen();

if(result=v2)
{
printf("|V1| > |V2|");
}
if(result=v1)
{
printf("|V1| < |V2|");
}
else
{
printf("|V1| = |V2|");
}

return 0;

}

int compVecLen(int v1[3]={X1,X2,X3}, int v2[3]={Y1,Y2,Y3})

{

amountv1=sqrt(X1*X1+X2*X2+X3*X3);
amountv2=sqrt(Y1*Y1+Y2*Y2+Y3*Y3);

if(amountv1<amountv2)
{
return v1;
}

if(amountv1>amountv2)
{
return v2;
}

else
{
return 0;
}

}

Dieser Beitrag wurde 2 mal editiert, zum letzten Mal von Tergo: 20.06.2016 13:14.

20.06.2016 13:09
Tergo
unregistriert
Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Bin jetzt (glaube ich) noch ein bisschen weitergekommen, allerdings erhalte ich eine Fehlermeldung bezüglich eines Syntax-Errors verwirrt

#include <stdio.h>
#include <math.h>

int compVecLen(int v1[], int v2[]); char result;
int X1,X2,X3,Y1,Y2,Y3;
int A1,A2,A3,B1,B2,B3;
int V1,V2;
int v1,v2;
int c,d;
int amountv1, amountv2;
int main()

{

int V1[3]={X1,X2,X3};
int V2[3]={Y1,Y2,Y3};

printf("Enter the values of Vector 1");
scanf("%d",&X1);
scanf("%d",&X2);
scanf("%d",&X3);

printf("Enter the values of Vector 2");
scanf("%d",&Y1);
scanf("%d",&Y2);
scanf("%d",&Y3);


result=compVecLen(V1,V2);

if(result=d)
{
printf("|V1| > |V2|");
}
if(result=c)
{
printf("|V1| < |V2|");
}
else
{
printf("|V1| = |V2|");
}

return 0;

}

int compVecLen(int v1,v2)

{

int v1[3]={A1,A2,A3};
int v2[3]={B1,B2,B3};

amountv1=sqrt(A1*A1+A2*A2+A3*A3);
amountv2=sqrt(B1*B1+B2*B2+B3*B3);

if(amountv1<amountv2)
{
return c;
}

if(amountv1>amountv2)
{
return d;
}

else
{
return 0;
}

}

Dieser Beitrag wurde 4 mal editiert, zum letzten Mal von Tergo: 20.06.2016 14:14.

20.06.2016 13:45
eulerscheZahl eulerscheZahl ist männlich
Foren Gott


Dabei seit: 04.01.2013
Beiträge: 2.859

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
#include <stdio.h>

int compVecLen(int v1[], int v2[]);
int main()
{
	int v1[3];
	int v2[3];
	int result;

	printf("Enter the values of Vector 1: ");
	scanf("%d", &v1[0]);
	scanf("%d", &v1[1]);
	scanf("%d", &v1[2]);

	printf("Enter the values of Vector 2: ");
	scanf("%d", &v2[0]);
	scanf("%d", &v2[1]);
	scanf("%d", &v2[2]);

	result=compVecLen(v1, v2);

	if (result == 0) printf("Both vectors have the same length\n");
	else if (result == 1) printf("The larger vector is v1\n");
	else printf("The larger vector is v2\n");
	return 0;

}

int compVecLen(int v1[], int v2[])
{
	int len1Sqr = v1[0]*v1[0] + v1[1]*v1[1] + v1[2]*v1[2];
	int len2Sqr = v2[0]*v2[0] + v2[1]*v2[1] + v2[2]*v2[2];
	if(len1Sqr < len2Sqr)
	{
		return -1;
	}
	if(len1Sqr > len2Sqr)
	{
		return 1;
	}
	if(len1Sqr == len2Sqr)
	{
		return 0;
	}
}


__________________
Syntax Highlighting fürs Board (Link)
20.06.2016 17:14 eulerscheZahl ist offline Beiträge von eulerscheZahl suchen Nehmen Sie eulerscheZahl in Ihre Freundesliste auf
Tergo
unregistriert
RE: Vektoren vergleichen in C Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Hallo,

vielen Dank, das ist es ja bereits (außer das sqrt bei der Berechnung).
Ich bin selber bis hierhin gekommen:

#include <stdio.h>
#include <math.h>

int compVecLen(int v1[], int v2[]);
char result;
int X1,X2,X3,Y1,Y2,Y3;
int A1,A2,A3,B1,B2,B3;
int c,d;
int amountv1, amountv2;
int main()

{

int V1[3]={X1,X2,X3};
int V2[3]={Y1,Y2,Y3};

printf("Enter the values of Vector 1");
scanf("%d",&X1);
scanf("%d",&X2);
scanf("%d",&X3);

printf("Enter the values of Vector 2");
scanf("%d",&Y1);
scanf("%d",&Y2);
scanf("%d",&Y3);

X1=V1[0];
X2=V1[1];
X3=V1[2];
Y1=V2[0];
Y2=V2[1];
Y3=V2[2];

result=compVecLen(V1,V2);

if(result==d)
{
printf("|V1| > |V2|");
}
if(result==c)
{
printf("|V1| < |V2|");
}
else
{
printf("|V1| = |V2|");
}

return 0;

}

int compVecLen(int v1[3], int v2[3])

{

int amountv1=sqrt(X1*X1+X2*X2+X3*X3);
int amountv2=sqrt(Y1*Y1+Y2*Y2+Y3*Y3);

if(amountv1 < amountv2)
{
return c;
}

if(amountv1 > amountv2)
{
return d;
}

else
{
return 0;
}

}


Kannst du mir verraten, was hier im Gegensatz zu deinem Ergebnis falsch lief?

Dieser Beitrag wurde 3 mal editiert, zum letzten Mal von Tergo: 20.06.2016 17:39.

20.06.2016 17:38
eulerscheZahl eulerscheZahl ist männlich
Foren Gott


Dabei seit: 04.01.2013
Beiträge: 2.859

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Die Wurzel brauchst du nicht, wenn du nur schauen willst, was größer ist. Die Wurzelfunktion ist nämlich streng monoton und kostet nur unnötig Rechenzeit.

Bei dir liegt einiges im Argen:
Unnötigerweise globale Variablen
X1=V1[0]; gehört genau anders herum, wenn im Vektor die Nutzereingabe stehen soll.
Die Variablen c und d sind nicht explizit initialisiert. Da global, sind sie mit 0 vorbelegt. Das heißt, du gibst in jedem Fall 0 zurück

code:
1:
2:
3:
4:
5:
if(result==c)
{
printf("|V1| < |V2|");
}
else

das else wird auch ausgeführt, wenn result == d ist.

__________________
Syntax Highlighting fürs Board (Link)
20.06.2016 17:53 eulerscheZahl ist offline Beiträge von eulerscheZahl suchen Nehmen Sie eulerscheZahl in Ihre Freundesliste auf
Tergo
unregistriert
Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Hallo, habe es nun angepasst:

#include <stdio.h>
#include <math.h>

int compVecLen(int v1[], int v2[]);
int result;
int main()

{

int V1[3];
int V2[3];

printf("Enter the values of Vector 1");
scanf("%d",&V1[0]);
scanf("%d",&V1[1]);
scanf("%d",&V1[2]);

printf("Enter the values of Vector 2");
scanf("%d",&V2[0]);
scanf("%d",&V2[1]);
scanf("%d",&V2[2]);

result=compVecLen(V1,V2);

if(result == 0)
{
printf("|V1| = |V2|");
}
else if(result == 1)
{
printf("|V1| > |V2|");
}
else
{
printf("|V1| < |V2|");
}

return 0;

}

int compVecLen(int v1[], int v2[])

{

int amountv1=sqrt(v1[0]*v1[0] + v1[1]*v1[1] + v1[2]*v1[2]);
int amountv2=sqrt(v2[0]*v2[0] + v2[1]*v2[1] + v2[2]*v2[2]);

if(amountv1<amountv2)
{
return -1;
}

if(amountv1>amountv2)
{
return 1;
}

if(amountv1==amountv2)
{
return 0;
}

}

Habe das sqrt jetzt doch mit reingenommen, sicher ist sicher, wegen Aufgabenstellung. Das müsste jetzt so passen, oder?
20.06.2016 17:58
eulerscheZahl eulerscheZahl ist männlich
Foren Gott


Dabei seit: 04.01.2013
Beiträge: 2.859

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Nein.
Nimm mal v1 = (1 2 2) und v2 = (2 2 2) und schau, was rauskommt.

__________________
Syntax Highlighting fürs Board (Link)
20.06.2016 18:09 eulerscheZahl ist offline Beiträge von eulerscheZahl suchen Nehmen Sie eulerscheZahl in Ihre Freundesliste auf
Tergo
unregistriert
Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

habt int bei amountv1 und amount v2 durch float ersetzt und hier und da etwas entschlackt:

#include <stdio.h>
#include <math.h>

int compVecLen(int v1[], int v2[]);
int main()

{

int result;
int V1[3];
int V2[3];

printf("Enter the values of Vector 1");
scanf("%d",&V1[0]);
scanf("%d",&V1[1]);
scanf("%d",&V1[2]);

printf("Enter the values of Vector 2");
scanf("%d",&V2[0]);
scanf("%d",&V2[1]);
scanf("%d",&V2[2]);

result=compVecLen(V1,V2);

if(result == 0)
{
printf("|V1| = |V2|");
}
else if(result == 1)
{
printf("|V1| > |V2|");
}
else
{
printf("|V1| < |V2|");
}

return 0;

}

int compVecLen(int v1[], int v2[])

{

double amountv1=sqrt(v1[0]*v1[0] + v1[1]*v1[1] + v1[2]*v1[2]);
double amountv2=sqrt(v2[0]*v2[0] + v2[1]*v2[1] + v2[2]*v2[2]);

if(amountv1<amountv2)
{
return -1;
}

if(amountv1>amountv2)
{
return 1;
}

return 0;

}

Nun erhalte ich auch für 1,2,2 und 2,2,2 das richtige Ergebnis.

Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Tergo: 20.06.2016 18:22.

20.06.2016 18:16
eulerscheZahl eulerscheZahl ist männlich
Foren Gott


Dabei seit: 04.01.2013
Beiträge: 2.859

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Sollte passen.

__________________
Syntax Highlighting fürs Board (Link)

Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von eulerscheZahl: 20.06.2016 18:20.

20.06.2016 18:20 eulerscheZahl ist offline Beiträge von eulerscheZahl suchen Nehmen Sie eulerscheZahl in Ihre Freundesliste auf
Tergo
unregistriert
Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Habe jetzt doch mal lieber Double eingesetzt, sicher ist sicher Daumen hoch

& Vielen, vielen Dank für deine Hilfe smile
20.06.2016 18:22
Baumstruktur | Brettstruktur
Gehe zu:
Neues Thema erstellen Antwort erstellen
Informatiker Board » Themengebiete » Praktische Informatik » Vektoren vergleichen in C