**Feladat**: adott egy 8 elemű float vektor, adja össze a vektor elemeit és írja ki a konzolra.
Első megoldás, egyszerű ciklus:
#include
int main()
{
float vektor[] = {1.2, 2.3, 3.4, 4.5, 5.5, 6.7, 4.5, 0.4};
float szumma = 0;
const int elemszam = 8;
for (int k = 0 ; k < elemszam; k++)
{
szumma += vektor[ k ];
}
printf("Szumma= %f", szumma);
}
Második megoldás, lebegőpontos mutatóval:
#include
int main()
{
float vektor[] = {1.2, 2.3, 3.4, 4.5, 5.5, 6.7, 4.5, 0.4};
float szumma = 0;
const int elemszam = 8;
float *v = vektor;
for (int k = 0 ; k < elemszam; k++, v++)
{
szumma += *v;
}
printf("Szumma= %f", szumma);
}
Harmadik megoldás, a k változót próbáljuk elhagyni:
#include
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
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
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;
int elemszam = sizeof(vektor) / sizeof(float);
do
{
szumma += *v;
}
while(++v != &vektor[elemszam]);
printf("Szumma= %f", szumma);
}