Seite 1 von 2

Frage zu arrays

Verfasst: Mi Nov 04, 2009 3:09 pm
von SolidS
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 ?

Re: Frage zu arrays

Verfasst: Mi Nov 04, 2009 6:18 pm
von Bebu
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

Code: Alles auswählen

int Variable
const int WERT = Variable
int array[WERT]
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 :mrgreen:

Re: Frage zu arrays

Verfasst: Mi Nov 04, 2009 8:54 pm
von cloidnerux
int Variable
const int WERT = Variable
int array[WERT]
Meines Wissens nach, ist eine solche zuweisung nicht erlaubt, da die zuweisung einer Konstanten Variable beim Compilieren erfolgen muss.
"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.
In diesem fall, kannst du 2 möglichkeiten Wählen:
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

Re: Frage zu arrays

Verfasst: Mi Nov 04, 2009 9:20 pm
von Bebu
Also folgendes Codebeispiel compiliert bei mir anstandslos durch:

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;
}
Unter C muss ich es erst ausprobieren.

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;
}
Mit reinem C klappts auch.

Re: Frage zu arrays

Verfasst: Mi Nov 04, 2009 9:29 pm
von cloidnerux
Also folgendes Codebeispiel compiliert bei mir anstandslos durch:
Hast du mal einen Index größer dem eingegeben Wert oder ungleich 0 getestet?

Re: Frage zu arrays

Verfasst: Mi Nov 04, 2009 9:35 pm
von Bebu
Jetzt kann ich dir nicht ganz folgen. Meinst du so was?

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;
}
Klappt auch

Re: Frage zu arrays

Verfasst: Do Nov 05, 2009 12:02 am
von Kerli
@SolidS: Ersteinmal, herzlich willkommen bei uns :)
cloidnerux hat geschrieben:

Code: Alles auswählen

int Variable;
const int WERT = Variable;
int array[WERT];
Meines Wissens nach, ist eine solche zuweisung nicht erlaubt, da die zuweisung einer Konstanten Variable beim Compilieren erfolgen muss.
Meines Wissens nach auch nicht, aber komischerweise beschwert sich mein gcc auch nicht :P
cloidnerux hat geschrieben:Erstens:
Listen.
Das würde ich wohl eher nur theoretisch verwenden. Für Vektoren bieten sich Arrays doch geradezu an.

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);
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 ;)

Re: Frage zu arrays

Verfasst: Do Nov 05, 2009 5:12 pm
von SolidS
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

Re: Frage zu arrays

Verfasst: Do Nov 05, 2009 5:21 pm
von Xin
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.

Re: Frage zu arrays

Verfasst: Fr Nov 06, 2009 9:41 am
von SolidS
soo habs jetzt endlich geschaft hier mal die lösung zum ersten teil nochmal vielen dank für eure hilfe :-)

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);
}
Edit by Xin: Code-Tags eingefügt.