Miért nem számolja ki a C programom az eredményt?
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();
}
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!
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.
É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);
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.
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
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!