Sie sind nicht angemeldet.

  • »Roflcopter147« ist der Autor dieses Themas

Beiträge: 2

Registrierungsdatum: 15.01.2017

Derivat: Ubuntu

Architektur: 64-Bit PC

Desktop: anderer Desktop

Andere Betriebssysteme: Linux Mint, Windows 8

  • Nachricht senden

1

15.01.2017, 20:46

Programmieren C(Vektorennormen)

Hallo,

ich habe die Aufgabe, ein Programm zu schreiben, dass drei verschiedene Vektornormen berechnet.

C/C++-Quelltext

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
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
#include <stdio.h>
#include <math.h>
#include <stdlib.h>


int main ()

{
   int Wahl; 
printf("Programm zur Berechnung von Vektornormen\n");
printf("Bitte wählen Sie eine der Normen\n");
printf("Summennorm(1),Euklidische Norm(2), oder Maximalnorm(3)");
scanf("%d" , &Wahl);

if (Wahl == 2);
int n;
printf("Bitte geben Sie die Größe des Vektors N ein\n");
scanf("%d" , &n);
{
double norm (int n, double v[n])
{
int quadrat, i;
double wurzel;

quadrat = 0;
for (i = 0;i<n; i++)
{
quadrat = quadrat + ((v[i])*(v[i]));
}

wurzel = sqrt(quadrat);

return(wurzel);
}

{
	
	double x[n];
	int i;
	double euklidnorm;
	
  
	printf("Bitte geben Sie %d Zahlen ein\n" , n);
	for (i=0; i<n; i++)
    	
	{
    	printf("Zahl %d: ", i+1);
    	scanf("%lf", &x[i]);
	}
	euklidnorm = norm(*x);
	
	printf("Norm = %5.21f" , euklidnorm);
	printf("\n");
	}
	}
if (Wahl == 1)
{
	double einsnorm ( int n, double *v)
	{
    	double Ergebniss = 0;
    	int i;
	for( i = 0; i < n; ++i)
	Ergebniss =Ergebniss + fabs(v[i]);
	return (Ergebniss);
	}

	{
    	double *x;
    	int i, n;
    	printf("Geben Sie die Länge N ihres Vektors ein;\n");
    	scanf("%d", &n);
    	x = malloc(n * sizeof(double));
    	for( i = 0; i < n; ++i)
    	{
        	printf("Geben sie x %d ein:\n", i+1);
        	scanf("%lf", &x[i]);
    	}
  	
    	printf("Die Summennorm ihres Vektors ist: %lf\n", einsnorm(n, x));
    	return 0;
	}
}

if (Wahl == 3)

{

	int i,n,Adresse = 1;
	double Maximum,*v;
	
   printf("Geben Sie die Länge des Vektors N ein\n");
   scanf("%d" , &n);
   
   printf("Geben Sie %d Zahlen ein\n" , n);
   
   for(i = 0 ;i < n;i++)
   	scanf("%lf", &v[i]);
   
   Maximum = v[0];
   
   for(i = 1;i < n;i++)
   {
   if (v[n] < Maximum)
   {
   	Maximum = v[i];
   	Adresse = i+1;
   }
   }
   printf("Der Maximale Betrag ist in Adresse %d und lautet %lf.\n",Adresse,Maximum);
   return 0;
}
}





Allerdings habe ich das Problem , dass ich bei der zweiten Norm(Euklid) eine Fehlermeldung bekomme



Vektorennorm.c:50:18: error: too few arguments to function 'norm'

euklidnorm = norm(*x)



Vektorennorm.c:20:8: note: declared here

double norm (int n, double v[n])





Ich habe bereits einiges versucht und umgeschrieben , jedoch ohne Erfolg.

Das Programm habe ich ursprünglich nur für die Euklidnorm geschrieben , wobei dann noch alles funktioniert hat.



Könnte mir jemand vllt. helfen?



Lg.

chroot

Ubuntu-Forum-Team

  • »chroot« ist männlich

Beiträge: 2 321

Registrierungsdatum: 04.03.2008

Derivat: Kein Ubuntu-Derivat

Architektur: 64-Bit PC

Desktop: KDE4

Andere Betriebssysteme: Fedora 27

  • Nachricht senden

2

15.01.2017, 21:24

Also ab zeile 20 passt irgendwas nicht mit deinem source. Da fängt die funktion "norm" an, aber mitten im main. Und "too few arguments" bedeutet, das du weniger aktualparameter an "norm" übergibst, als formalparameter gefordert sind. Der erste aktualparameter ist die länge des arrays und der zweite das array selbst.
"Do or do not. There is no try." (Yoda) || Thread auf gelöst/erledigt setzen

  • »Roflcopter147« ist der Autor dieses Themas

Beiträge: 2

Registrierungsdatum: 15.01.2017

Derivat: Ubuntu

Architektur: 64-Bit PC

Desktop: anderer Desktop

Andere Betriebssysteme: Linux Mint, Windows 8

  • Nachricht senden

3

15.01.2017, 21:34

Joa


Also ab zeile 20 passt irgendwas nicht mit deinem source. Da fängt die funktion "norm" an, aber mitten im main. Und "too few arguments" bedeutet, das du weniger aktualparameter an "norm" übergibst, als formalparameter gefordert sind. Der erste aktualparameter ist die länge des arrays und der zweite das array selbst.

Im Ursprünglichen Quellentext, hatte ich keine Abfrage bzgl. des N-Wertes , sondern habe es oben mit #define N 3 deklariert.
In diesem Fall hat alles funktioniert.
Nun wollte ich diesmal eine printf/scanf Zeile hinzufügen , um mit einem eigenem N-Wert zu arbeiten, also wieviele Vektoren/Zahlen berechnet werden sollen. :(

chroot

Ubuntu-Forum-Team

  • »chroot« ist männlich

Beiträge: 2 321

Registrierungsdatum: 04.03.2008

Derivat: Kein Ubuntu-Derivat

Architektur: 64-Bit PC

Desktop: KDE4

Andere Betriebssysteme: Fedora 27

  • Nachricht senden

4

15.01.2017, 21:37

sondern habe es oben mit #define N 3 deklariert.

Und was machst du wenn, dein vektor länger als 3 ist?

Am besten, du trennst main und die norm funktion und übergibst die länge des vektors, dann sollte es keine probleme mehr geben.
"Do or do not. There is no try." (Yoda) || Thread auf gelöst/erledigt setzen