WCM Forum

WCM Forum (http://www.wcm.at/forum/index.php)
-   Programmierung (http://www.wcm.at/forum/forumdisplay.php?f=17)
-   -   C - Vektoren (http://www.wcm.at/forum/showthread.php?t=116966)

Bastet 28.11.2003 00:33

C - Vektoren
 
vektoren. also ich glaub ich steh mal wieder auf der seife. und ja - ich hab bereits mehrere skripte sudiert
(im inet gibts genug davon - deshalb, bitte nicht aus nem buch zitieren, dass hilft mir nichts, weil sonst
hätt ichs bereits kapiert ;) ) sorry, falls euch meine erklärungen irritieren, aber ich bin absolut keine
meisterin in erklärungen - schaltets für mich einfach mal auf dummiemodus, danke.


vektor syntax:
typ variablenname[anzahl_der_elemente_odr_auch_index_genannt];

Code:

#include <stdio.h>
int main()
{
        int i, zahl[10];  /* meine fragen-erklärungen zum beispiel siehe unten. NR 1 */

        printf("...");                      /* nö - keine frage  */
            for (i=0; i<10; i++)                  /* frage NR 2 */
                  scanf(".....", zahl[i]);          /* frage NR 3 */

        for (i=9; i>=0; i--)                  /*frage NR 4 */
                prinft("...", zahl[i]);

        return 1;
}

NR 1 syntax: zahl[10] verstanden, aber wieso brauch ich noch ne var i?
NR 2 schätze mal i=0; gilt für anfang und i<10 ist das ende (weil 10 werte - wobei von 0-9 gezählt wird,
i++ bedeutet, dass bei der eingabe der werte - nach enter immer der wert auf dem nächsten platz
gespeichert wird.
NR 3 zahl[i] betrifft irgendwie NR 1 - könnte ich nicht: for (zahl=0; zahl<10; zahl++) scanf(".....", zahl[])
schreiben? wieso sollte ich bei varname[index] in index die var i angeben?
NR 4 wenn ich was umgekehrt (i--) ausgeben möchte schreibe ich zuerst: for i=9 weil ich ja von hinten anfange.

soweit so gut, aber ich hab noch ein beispiel, da versteh ich scheinbar nur mehr bahnhof...

Code:


#include <stdio.h>

int main()
{
        int i, laenge, wort[21];

        for(i=0; i<21; i++)
                  wort[i]=0;                                              /* frage NR 1 */

        printf("....");

        while(getchar()!='\n')
        {       
                for(laenge=1; getchar()!='\n'; laenge++);                  /* frage NR 2 */
       
                if(laenge>20)
                        wort[20]++;
                else       
                        wort[laenge-1]++;                                  /*frage NR 3 */
        }
        for(i=0; i<21; i++)
                printf("%d Wörter mit %d Buchstaben\n", wort[i], i+1);  /* frage NR 4 */
        return 1;
}

NR 1 wieso geb ich dass jetzt an, beim obigen beispiel musste ich dass nicht.
NR 2 wieso laenge=1 ? müsste dass nicht laenge=0 sein, ich fange doch bei 0 an.
NR 3 häää???
NR 4 ist mir klar dass ich %d was zuweisen muss, aber wieso hat das i ein +1?

Who-T 28.11.2003 04:53

also erstens: gebräuchlicher ist der ausdruck array. vektor ist nur selten in dem zusammenhang zu finden.

zu deinen fragen:

1) i brauchst du zum durchlaufen des arrays
und weil du in c bist musst du die vars oben bereits deklarieren. i hat aber ansonsten mit zahl nix zu tun, ist eine eigentständige var.

vielleicht verständlicher wenn du schreibst

int zahl[10]; // array
int i; /counter

2 + 3)
stell dir ein array als straße vor. der name des arrays ist der straßenname.
zahl ist also eine straße mit 10 häusern, in denen kannst du werte speichern.

wenn du auf das dritte haus zugreifen willst brauchst du straßenname + hausnummer.
zahl[2]

oder - ohne vergleich. zahl ist nur ein pointer auf die startadresse eines freien speicherbereiches. die länge des speicherbereichs ist die anzahl der elemente * der größe in bytes pro element. um auf ein element zugreifen zu können, benutzt man den index, der die entsprechende zahl an bytes "weiterspringt"

zweiter fragenblock:
nr 1: die werte im array sind nicht standardmäßig gesetzt, sprich nehmen irgendeinen wert an. deshalb setzt du alle werte zu sicherheit mal auf 0.
nr 2 + 3: das is wirklich strange. aber da du an der position laenge - 1 speicherst, fängst du effektiv eh bei 0 an.
der grund ist hier die besssere lesbarkeit, (laenge fängt bei 1 an) meiner meinung nach aber net wirklcih sinnvoll hier. kommentare fehlen, genau solche sachen gehören kommentiert
nr 4: du speicherst an index 0 die zahl der wörter mit 1 buchstaben länge, an index 1 die mit 2 buchstaben usw.
sprich an adresse i speicherst du die zahl der wörter mit i+1 buchstaben.

alles klar?

Bastet 28.11.2003 09:28

ja danke - du hasts super erklärt - ich habs jetzt verstanden :)


wenn ich irgendwo so ne erklärung gefunden hätte, hätte ich mein hirn nicht so malträtieren müssen... tja, wieso solltens die bücher einfach schreiben. da könnte doch dann jeder alles :D ;)

Who-T 29.11.2003 02:16

i schick da halt dann die rechnung :D


Alle Zeitangaben in WEZ +2. Es ist jetzt 07:31 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
© 2009 FSL Verlag