Feladat: adott egy 8 elemű float vektor, adja össze a vektor elemeit és írja ki a konzolra.

Első megoldás, egyszerű ciklus:

    #include <stdio.h>
    int main()
    {
        float vektor[ ] = {1.2, 2.3, 3.4, 4.5, 5.5, 6.7, 4.5, 0.4} ;
        float szumma = 0;
        int k, elemszam;
        elemszam = 8;
        for ( k = 0 ; k < elemszam; k++)
        {
            szumma += vektor[ k ];
        }
        printf("Szumma= %f", szumma);
    }

Második megoldás, lebegőpontos mutatóval:

    #include <stdio.h>
    int main()
    {
        float vektor[ ] = {1.2, 2.3, 3.4, 4.5, 5.5, 6.7, 4.5, 0.4};
        float szumma = 0;
        int k, elemszam = 8;
        float *v = vektor;
 
        for ( k = 0 ; k < elemszam; k++)
        {
            szumma += *v;
            v++;
        }
        printf("Szumma= %f", szumma);
    }

Harmadik megoldás, a k változót próbáljuk elhagyni:

    #include <stdio.h>
    int main()
    {
        float vektor[ ] = {1.2, 2.3, 3.4, 4.5, 5.5, 6.7, 4.5, 0.4};
        float szumma = 0;
        int elemszam = 8;
        float *v = vektor;
 
        for ( ; v != &vektor[elemszam]; v++)
        {
            szumma += *v;
        }
        printf("Szumma= %f", szumma);
    }

Negyedik megoldás, do-while ciklussal, valamit a pointer növelését ne elkülönítve végezzük:

    #include <stdio.h>
    int main()
    {
        float vektor[ ] = {1.2, 2.3, 3.4, 4.5, 5.5, 6.7, 4.5, 0.4};
        float szumma = 0;
        int elemszam = 8;
        float *v = vektor;
 
        do 
        {
            szumma += *v;
        }  
        while(++v != &vektor[elemszam]);
 
        printf("Szumma= %f", szumma);
    }

Fontos megjegyzés: itt nem baj hogy a vektor index túl van címezve ( &vektor[elemszam] ), mert pontosan arra a memóriaterületre mutat, amit már nem szabad használnia, azaz ha a v pointer értékét először megnövelve, majd öszehasonlítva az utolsó utáni vektorelem memóriacimével megegyezik, pontosan akkor nem lesz a ciklus többször végrehajtva.

Ötödik megoldás, próbáljuk meg az elemszám változót is elhagyni:

    #include <stdio.h>
    int main()
    {
        float vektor[ ] = {1.2, 2.3, 3.4, 4.5, 5.5, 6.7, 4.5, 0.4};
        float szumma = 0, *v = vektor;
 
        do 
        {
            szumma += *v;
        }  
        while(++v != &vektor[sizeof(vektor)/sizeof(float)]);
 
        printf("Szumma= %f", szumma);
    }
 
tanszek/oktatas/szamitastechnika/vektorok_peldak.txt · Last modified: 2020/12/02 16:31 by doku_admin
 
Recent changes RSS feed Creative Commons License Donate Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki