Frage zu arrays
Frage zu arrays
Hallo zusammen und erstmal ein großes dank an die gut geschriebene tut ich bin totaler anfänger im programieren und konto durch die tut die ersten programme schnell selbständig schreiben nun habe ich aber eine aufgabe zu der ich ein paar tipps brauche
"1 Aufgabe
Teil 1: Schreiben Sie ein Programm, das das innere Produkt zweier Vektoren berechnet,
wobei die Berechnung innerhalb einer Schleife erfolgen soll. Das innere Produkt zweier
Vektoren a = (a1; a2; : : : ; an) und b = (b1; b2; : : : ; bn) ist deniert als
a * b = a1 * b1 + a2 * b2 + : : : + an * bn:
Die Vektoren a und b sollen mittels scanf eingelesen werden, die Läange n darf auf 10
beschränkt werden.
Teil 2: Schreiben Sie ein Programm, das die Determinante einer 3 * 3-Matrix berechnet.
Die Matrix-Elemente sollen mittels scanf eingelesen werden. Die Determinante einer 3*3-
Matrix A
A =
0
@
a11 a12 a13
a21 a22 a23
a31 a32 a33
1
A
ist deniert als
det(A) := a11 * a22 * a33 + a12 * a23 * a31 + a13 * a21 * a32
-a13 * a22 * a31 - a12 * a21 * a33 - a11 * a23 * a32"
so ansich ja relativ einfach ich erstlle ein array für a und b und lege diese auf 11 fest und lasse sie danach vom benutzer eingeben. Nur würde ich gerne das der benutzer die größe des array selber festlegen kann kann mir da vllt einer weiterhelfen ?
"1 Aufgabe
Teil 1: Schreiben Sie ein Programm, das das innere Produkt zweier Vektoren berechnet,
wobei die Berechnung innerhalb einer Schleife erfolgen soll. Das innere Produkt zweier
Vektoren a = (a1; a2; : : : ; an) und b = (b1; b2; : : : ; bn) ist deniert als
a * b = a1 * b1 + a2 * b2 + : : : + an * bn:
Die Vektoren a und b sollen mittels scanf eingelesen werden, die Läange n darf auf 10
beschränkt werden.
Teil 2: Schreiben Sie ein Programm, das die Determinante einer 3 * 3-Matrix berechnet.
Die Matrix-Elemente sollen mittels scanf eingelesen werden. Die Determinante einer 3*3-
Matrix A
A =
0
@
a11 a12 a13
a21 a22 a23
a31 a32 a33
1
A
ist deniert als
det(A) := a11 * a22 * a33 + a12 * a23 * a31 + a13 * a21 * a32
-a13 * a22 * a31 - a12 * a21 * a33 - a11 * a23 * a32"
so ansich ja relativ einfach ich erstlle ein array für a und b und lege diese auf 11 fest und lasse sie danach vom benutzer eingeben. Nur würde ich gerne das der benutzer die größe des array selber festlegen kann kann mir da vllt einer weiterhelfen ?
- Bebu
- Beiträge: 562
- Registriert: Mi Okt 21, 2009 6:19 pm
- Wohnort: In der Nähe von Salzburg - Bin aber kein Österreicher!
Re: Frage zu arrays
Willst du die Arraygröße vom Benutzer festlegen lassen, bevor du die Werte abfrägst, oder soll es dynamisch mitwachsen?
Für den ersten Fall ist die Lösung einfach. Frag den Benutzer nach der Arrraygröße, schreib die Eingabe in eine Int Variable und übergibt die Variable dem Array als Größenangaben
in Variable speicherst du die Variablengröße.
Für die zweite Methode wirds komplizierter, da wirst du wohl Speicher anfordern müssen oder Container nutzen (gibts die unter C schon?). Das soll dann jemand erklären, der sich auskennt
Für den ersten Fall ist die Lösung einfach. Frag den Benutzer nach der Arrraygröße, schreib die Eingabe in eine Int Variable und übergibt die Variable dem Array als Größenangaben
Code: Alles auswählen
int Variable
const int WERT = Variable
int array[WERT]
Für die zweite Methode wirds komplizierter, da wirst du wohl Speicher anfordern müssen oder Container nutzen (gibts die unter C schon?). Das soll dann jemand erklären, der sich auskennt

Wer immer nach dem Unerreichbaren jagt, der wird irgendwann auf die Schnauze fallen!
- cloidnerux
- Moderator
- Beiträge: 3125
- Registriert: Fr Sep 26, 2008 4:37 pm
- Wohnort: Ram (Gibts wirklich)
Re: Frage zu arrays
Meines Wissens nach, ist eine solche zuweisung nicht erlaubt, da die zuweisung einer Konstanten Variable beim Compilieren erfolgen muss.int Variable
const int WERT = Variable
int array[WERT]
In diesem fall, kannst du 2 möglichkeiten Wählen:"1 Aufgabe
Teil 1: Schreiben Sie ein Programm, das das innere Produkt zweier Vektoren berechnet,
wobei die Berechnung innerhalb einer Schleife erfolgen soll. Das innere Produkt zweier
Vektoren a = (a1; a2; : : : ; an) und b = (b1; b2; : : : ; bn) ist deniert als
a * b = a1 * b1 + a2 * b2 + : : : + an * bn:
Die Vektoren a und b sollen mittels scanf eingelesen werden, die Läange n darf auf 10
beschränkt werden.
Erstens:
Listen.
Zweitens:
Da ich nicht weiß, aus welchem Tutorial du das hast, kannst du unter C++ auch Vectoren nutzen, was einer besseren Implemantation von Listen entspricht
Redundanz macht wiederholen unnötig.
quod erat expectandum
quod erat expectandum
- Bebu
- Beiträge: 562
- Registriert: Mi Okt 21, 2009 6:19 pm
- Wohnort: In der Nähe von Salzburg - Bin aber kein Österreicher!
Re: Frage zu arrays
Also folgendes Codebeispiel compiliert bei mir anstandslos durch:
Unter C muss ich es erst ausprobieren.
Edit:
Mit reinem C klappts auch.
Code: Alles auswählen
#include <iostream>
using namespace std;
int main()
{
int anzahl;
cout << "Anzahl eingeben:";
cin >> anzahl;
const int ANZAHL = anzahl;
int array[ANZAHL];
array[0] = 24;
cout << array[0];
return 0;
}
Edit:
Code: Alles auswählen
#include <stdio.h>
#include <stdlib.h>
int main()
{
int anzahl;
printf("Anzahl eingeben\n");
scanf("%i",&anzahl);
const int ANZAHL = anzahl;
int array[ANZAHL];
array[0] = 5;
printf("%i",array[0]);
return 0;
}
Zuletzt geändert von Bebu am Mi Nov 04, 2009 9:32 pm, insgesamt 1-mal geändert.
Wer immer nach dem Unerreichbaren jagt, der wird irgendwann auf die Schnauze fallen!
- cloidnerux
- Moderator
- Beiträge: 3125
- Registriert: Fr Sep 26, 2008 4:37 pm
- Wohnort: Ram (Gibts wirklich)
Re: Frage zu arrays
Hast du mal einen Index größer dem eingegeben Wert oder ungleich 0 getestet?Also folgendes Codebeispiel compiliert bei mir anstandslos durch:
Redundanz macht wiederholen unnötig.
quod erat expectandum
quod erat expectandum
- Bebu
- Beiträge: 562
- Registriert: Mi Okt 21, 2009 6:19 pm
- Wohnort: In der Nähe von Salzburg - Bin aber kein Österreicher!
Re: Frage zu arrays
Jetzt kann ich dir nicht ganz folgen. Meinst du so was?
Klappt auch
Code: Alles auswählen
#include <stdio.h>
#include <stdlib.h>
int main()
{
int anzahl;
printf("Anzahl eingeben\n");
scanf("%i",&anzahl);
const int ANZAHL = anzahl;
int array[ANZAHL];
int i;
int j;
for (i=0; i < ANZAHL; ++i)
{
array[i] = i;
}
for (j=0; j < ANZAHL; ++j)
{
printf("Wert %i \n",array[j]);
}
return 0;
}
Wer immer nach dem Unerreichbaren jagt, der wird irgendwann auf die Schnauze fallen!
Re: Frage zu arrays
@SolidS: Ersteinmal, herzlich willkommen bei uns 

Unter C/C++ ist eine sehr gute Möglichkeit den Speicher für das Array einfach dynamisch an zu fordern:
Ein vollständiges Beispiel dazu findest du auch im Wiki.
Wenn du C++ verwendest dann würde ich natürlich 'new' und 'delete' verwenden, oder wie schon von cloidnerux erwähnt std::vector. Aber aus deinem Posting tippe ich bei dir eher auf C

Meines Wissens nach auch nicht, aber komischerweise beschwert sich mein gcc auch nichtcloidnerux hat geschrieben:Meines Wissens nach, ist eine solche zuweisung nicht erlaubt, da die zuweisung einer Konstanten Variable beim Compilieren erfolgen muss.Code: Alles auswählen
int Variable; const int WERT = Variable; int array[WERT];

Das würde ich wohl eher nur theoretisch verwenden. Für Vektoren bieten sich Arrays doch geradezu an.cloidnerux hat geschrieben:Erstens:
Listen.
Unter C/C++ ist eine sehr gute Möglichkeit den Speicher für das Array einfach dynamisch an zu fordern:
Code: Alles auswählen
int anzahl;
printf("Bitte Anzahl eingeben");
scanf("%i", &anzahl);
int *array = (int*)malloc( size * sizeof(int) );
array[0] = ...
// ...
// Wichtig! Speicher freigeben
free(array);
Wenn du C++ verwendest dann würde ich natürlich 'new' und 'delete' verwenden, oder wie schon von cloidnerux erwähnt std::vector. Aber aus deinem Posting tippe ich bei dir eher auf C

"Make it idiot-proof and someone will invent an even better idiot." (programmers wisdom)
OpenGL Tutorials und vieles mehr rund ums Programmieren: http://www.tomprogs.at
OpenGL Tutorials und vieles mehr rund ums Programmieren: http://www.tomprogs.at
Re: Frage zu arrays
Hallo und danke für die vielen antworten scheint ja doch etwas komplexer zu sein als ich dachte naja ich werde das program erstmal mit nem festgelegten array (wie in der aufgabe verlangt) schreiben und danach mal rumexperimentieren brauche erstmal für morgen halt nen fertig laufendes programm
- Xin
- nur zu Besuch hier
- Beiträge: 8862
- Registriert: Fr Jul 04, 2008 11:10 pm
- Wohnort: /home/xin
- Kontaktdaten:
Re: Frage zu arrays
Wichtig ist, dass Du niemals einen Zeiger (oder Referenz) zurückgibst, die nicht mehr gültig ist.
Das heißt, Du darfst keine Zeiger auf lokale Variablen gsetzt haben, wenn Du die funktion verlässt und Du darfst keinen Speicher freigeben, wenn jemand anderer darauf zeigt.
Zweiteres wird von vielen als Problem angesehen, aber mit etwas Erfahrung wirst Du ein sauberes Softwaredesign wählen, so dass Du genau weißt, wann Du Speicher anforderst und diesen wieder freigeben kannst.
Das heißt, Du darfst keine Zeiger auf lokale Variablen gsetzt haben, wenn Du die funktion verlässt und Du darfst keinen Speicher freigeben, wenn jemand anderer darauf zeigt.
Zweiteres wird von vielen als Problem angesehen, aber mit etwas Erfahrung wirst Du ein sauberes Softwaredesign wählen, so dass Du genau weißt, wann Du Speicher anforderst und diesen wieder freigeben kannst.
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.
Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.
Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.
Re: Frage zu arrays
soo habs jetzt endlich geschaft hier mal die lösung zum ersten teil nochmal vielen dank für eure hilfe 
Edit by Xin: Code-Tags eingefügt.

Code: Alles auswählen
#include <stdio.h>
int main(void){
int anzahl;
printf("geben sie die größe des arrays ein\n");
scanf("%i",&anzahl);
int WERT = anzahl;
int a[WERT], b[WERT], ergebnis=0, i;
printf("Bitte geben sie 10 Werte fuer a ein:\n");
for(i=0;i<WERT;i++){
scanf("%d", &a[i]);
}
printf("\n\n");
printf("Bitte geben sie 10 Werte fuer b ein:\n");
for(i=0;i<WERT;i++){
scanf("%d", &b[i]);
ergebnis+=(a[i]*b[i]);
}
printf("\n\n");
printf("Das Ergebnis lautet:\n\n\n");
printf("%d\n", ergebnis);
}