Frage zu arrays

Schnelle objektorientierte, kompilierende Programmiersprache.
SolidS
Beiträge: 7
Registriert: Mi Nov 04, 2009 3:01 pm

Frage zu arrays

Beitrag von SolidS » Mi Nov 04, 2009 3:09 pm

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 ?

Benutzeravatar
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

Beitrag von Bebu » Mi Nov 04, 2009 6:18 pm

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:
Wer immer nach dem Unerreichbaren jagt, der wird irgendwann auf die Schnauze fallen!

Benutzeravatar
cloidnerux
Moderator
Beiträge: 3125
Registriert: Fr Sep 26, 2008 4:37 pm
Wohnort: Ram (Gibts wirklich)

Re: Frage zu arrays

Beitrag von cloidnerux » Mi Nov 04, 2009 8:54 pm

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
Redundanz macht wiederholen unnötig.
quod erat expectandum

Benutzeravatar
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

Beitrag von Bebu » Mi Nov 04, 2009 9:20 pm

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.
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!

Benutzeravatar
cloidnerux
Moderator
Beiträge: 3125
Registriert: Fr Sep 26, 2008 4:37 pm
Wohnort: Ram (Gibts wirklich)

Re: Frage zu arrays

Beitrag von cloidnerux » Mi Nov 04, 2009 9:29 pm

Also folgendes Codebeispiel compiliert bei mir anstandslos durch:
Hast du mal einen Index größer dem eingegeben Wert oder ungleich 0 getestet?
Redundanz macht wiederholen unnötig.
quod erat expectandum

Benutzeravatar
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

Beitrag von Bebu » Mi Nov 04, 2009 9:35 pm

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
Wer immer nach dem Unerreichbaren jagt, der wird irgendwann auf die Schnauze fallen!

Benutzeravatar
Kerli
Beiträge: 1456
Registriert: So Jul 06, 2008 10:17 am
Wohnort: Österreich
Kontaktdaten:

Re: Frage zu arrays

Beitrag von Kerli » Do Nov 05, 2009 12:02 am

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

SolidS
Beiträge: 7
Registriert: Mi Nov 04, 2009 3:01 pm

Re: Frage zu arrays

Beitrag von SolidS » Do Nov 05, 2009 5:12 pm

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

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8862
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: Frage zu arrays

Beitrag von Xin » Do Nov 05, 2009 5:21 pm

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.
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.

SolidS
Beiträge: 7
Registriert: Mi Nov 04, 2009 3:01 pm

Re: Frage zu arrays

Beitrag von SolidS » Fr Nov 06, 2009 9:41 am

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.

Antworten