Kezdőoldal » Számítástechnika » Programozás » Miért nem számolja ki a C...

Miért nem számolja ki a C programom az eredményt?

Figyelt kérdés

Már a mai nap kértem segítséget a gyakorikérdések oldalon és akkor tudtak segíteni, szóval bátorkodom megint ezt tenni. Egy olyan C programot kéne egyetemi beadandónak írnom, ami bekér egy n elemszámú vektort és kiszámítja a hosszát, a bekérés és az elemek kiírása már tökéletesen megy, viszont a vektor hosszának kiszámítása nem megy, ami elméletileg úgy lenne, hogy összeadom az elemek négyzeteit, majd gyököt vonok belőle. Eddig ezt sikerült írni:

#include <stdio.h>


int main()

{

int n,i;

printf("Kerem adja meg az elemek szamat!\n");

scanf("%d",&n);

int a[n];

for (i=0; i<n; i++)

{

printf("Kerem a vektor %d sorszamu egesz szamat!\n",i);

scanf("%d", &a[i]);

}

printf("A vektor elemei: ");

for (i=0; i<n; i++)

{

printf("%d ",a[i]);

}

int h;

for (i=0; i<n; i++);

{

h=h+pow(a[i],2);

}

h=sqrt(h);

printf("\nA vektor hossza: %d",h);

getch();

}



2014. nov. 16. 11:39
 1/6 Tengor ***** válasza:
int h; << ez inkább int h=0;
2014. nov. 16. 11:42
Hasznos számodra ez a válasz?
 2/6 A kérdező kommentje:
kipróbáltam, de sajna így se működött :(
2014. nov. 16. 11:50
 3/6 Tengor ***** válasza:

Ne privátba!

for (i=0; i<n; i++);

{

h=h+pow(a[i],2);

}


A for-t lezártad ;-vel, így amit ciklus magnak gondolsz az csak egy utasítás, mivel az i korábban már n-nél nagyobb volt, egy random memóriaértékkel számol.

Vedd ki a ;-t!

2014. nov. 16. 11:58
Hasznos számodra ez a válasz?
 4/6 anonim ***** válasza:

Mit a hibaüzenet? Vagy fut a program csak nem ír ki semmit?


Ha az i int típusú akkor miért használsz %d-t a kiíráshoz és a beolvasáshoz? Az n úgyszintén.

2014. nov. 16. 12:02
Hasznos számodra ez a válasz?
 5/6 anonim ***** válasza:

Én erre javítottam, a következők miatt:

-a vektor hossza nagyon ritkán egész szám, erre jobb a float v double

-négyzetre emelést pazarlás pow-al végezni

-próbálj meg beszédesebb változóneveket használni


int h = 0;

for (i=0; i<n; i++)

{

h+= a[i]*a[i];

}

float hossz = sqrt(h);

printf("\nA vektor hossza: %f",hossz);

2014. nov. 16. 12:03
Hasznos számodra ez a válasz?
 6/6 anonim ***** válasza:

A másik nagyobb probléma az, hogy a kérdező egy dinamikus tömböt szeretne deklarálni statikus módon, és ez nem jó: mivel a tömb mérete futásidőben derül ki,de a tömb deklarációjakor a tömb mérete 0 így ez okoz hibát. Használd ehelyett:

int a[n]; helyett:

int *a;

a=(int *)malloc(n*sizeof(*a));

Ez futásidőben foglal memóriát,de ne felejtsd includólni <string.h> headert.

h=sqrt(h) sor után vagy előtt meg szúrj be egy

free(a);

sort ez felszabadítja a memóriát.

2014. nov. 17. 12:55
Hasznos számodra ez a válasz?

Kapcsolódó kérdések:




Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!