Sie sind nicht angemeldet.

Lieber Besucher, herzlich willkommen bei: Ubuntu-Forum & Kubuntu-Forum | www.Ubuntu-Forum.de. Falls dies Ihr erster Besuch auf dieser Seite ist, lesen Sie sich bitte die Hilfe durch. Dort wird Ihnen die Bedienung dieser Seite näher erläutert. Darüber hinaus sollten Sie sich registrieren, um alle Funktionen dieser Seite nutzen zu können. Benutzen Sie das Registrierungsformular, um sich zu registrieren oder informieren Sie sich ausführlich über den Registrierungsvorgang. Falls Sie sich bereits zu einem früheren Zeitpunkt registriert haben, können Sie sich hier anmelden.

  • »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