Avatar billede meltinis Nybegynder
02. december 2003 - 10:45 Der er 9 kommentarer og
1 løsning

Sqrt() vil ikke som jeg vil

Hvorfor vil dette ikke virke?

int main()
{
  int i;
  float s;
 
  for(i=0;i<10;i++)
  {
    s = double sqrt((double)i);
    printf("%f",s);
  }
}

Den skriver at der er en parse error...
Kan den ikke finde ud af at typecaste inde i sqrt?
Avatar billede arne_v Ekspert
02. december 2003 - 10:56 #1
s = sqrt(i);

bør være nok.
Avatar billede arne_v Ekspert
02. december 2003 - 10:56 #2
Men du *skal* huske:

#include <math.h>
Avatar billede arne_v Ekspert
02. december 2003 - 10:57 #3
(det er formentlig double foran sqrt uden parenteser der gav parse fejlen)
Avatar billede meltinis Nybegynder
04. december 2003 - 21:20 #4
Jeg kan ikke få det til at virke... tror det er når jeg kompiler...
Jeg lukker
Avatar billede arne_v Ekspert
04. december 2003 - 21:25 #5
Hvad fejl får du ?
Avatar billede drunkensailor Nybegynder
05. december 2003 - 17:19 #6
Synes du har flere fejl i din kode.

1. fejl
>>s = double sqrt((double)i);
du caster din sqrt til en double, som du gemmer i en float (double fylder mere end float).

2. fejl
samme linje - hvorfor ønsker du at caste en int (i) til en double - det får du intet ud af - men det er muligt - også i en sqrt.

3. fejl
>>int main()
hvis du har int main - skal du også have en "return 0;" sidst i programmet.
alternativt kan du blot skrive "void main ()" - så skal der ikke returneres

og som arne v siger skal <math.h> inkluderes

følgende program virker på mit system.



#include <math.h>
#include <iostream>
using namespace std;

void main()
{

  float s;
 
  for(int i=0;i<10;i++)
  {
    s = (float)sqrt(i);
    cout <<s<<endl;
  }
}
Avatar billede arne_v Ekspert
05. december 2003 - 18:18 #7
re 1)

Det er ikke en fejl at assigne fra en double til en float (næppe klogt men
legalt).

Men det er en fejl ikke at have () omkring en C style cast.

re 2)

Muligvis fordi nogen compilere vil have en cast.

re 3)

main er int main ikke void main - så der skal tilføjes en retur værdi.

=====================================================================

Jeg ville lave det som:

C

#include <stdio.h>
#include <math.h>

int main()
{

  float s;
  int i;
  for(i=0;i<10;i++)
  {
    s = sqrt(i);
    printf("%f\n",s);
  }
  return 0;
}

C++

#include <iostream>
#include <cmath>

using namespace std;

int main()
{

  for(int i=0;i<10;i++)
  {
    float s = sqrt((float)i);
    cout << s << endl;
  }
  return 0;
}
Avatar billede drunkensailor Nybegynder
06. december 2003 - 14:33 #8
komentar til Arne v

du skriver:
>>main er int main ikke void main - så der skal tilføjes en retur værdi.

det er altså frivilligt om du vil skrive int eller void main - i hvert fald i de nyere c++ programmer som .net m.v.
Det er gammel standard tilbage fra c tiden - og kun vane - ikke påkrævet...
Avatar billede arne_v Ekspert
06. december 2003 - 14:55 #9
Nej.

C++ standarden siger int.

C standarden siger int (men har et smuthul "or in some other implementation-defined manner").

Langt de fleste C og C++ compilere accepterer void main.

Men det gør det ikke til korrekt C eller C++.
Avatar billede meltinis Nybegynder
11. januar 2005 - 13:04 #10
Denne er vidst ikke relevant mere...
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester