Avatar billede phpnewbie Nybegynder
22. november 2001 - 12:18 Der er 12 kommentarer og
2 løsninger

Problem med Return.

Dav igen.. jeg har et problem med en funktion.. den returnerer ikke de værdier den får regnet ud :(

Jeg har lavet en funktion.. eksponent:

int eksponent(int tal1, int tal2) {
  int i;
  long result = tal1;
  for(i=1;i<=tal2;i++) {
    //printf(\"%d\\n\", result);
    result = result * tal1;
  }
  return result;
}

og den bliver kaldt fra en anden funktion med:

rest = number%eksponent(16/i);

men rest forbliver 0...

På forhånd tak for hjælpen :D
Avatar billede disky Nybegynder
22. november 2001 - 12:22 #1
det er nok fordi din % operator giver 0 som resultat.
Avatar billede mickni33 Nybegynder
22. november 2001 - 12:24 #2
du er sikker på dit resultat ikke er lig nul ?
ellers prøv dette funktions tjek
result returnere 100 så skulle den gerne udskrive 100 hvis den gør det er der noget galt med regnestykket
prøv det først

int eksponent(int tal1, int tal2) {
  int i;
  long result = tal1;
  for(i=1;i<=tal2;i++) {
    //printf(\"%d\\n\", result);
    result = 100;
  }
  return result;
}



Avatar billede martinskou Nybegynder
22. november 2001 - 12:25 #3
Kan det være fordi din variable result er af typen long, og du returnerer en int ??
Avatar billede mickni33 Nybegynder
22. november 2001 - 12:26 #4
undskyld der er mere
udskriv result

rest=exponent(16,i);
udskriv så rest med cout<< eller printf
Avatar billede phpnewbie Nybegynder
22. november 2001 - 12:27 #5
Så giver mit program følgende output..

Indtast tal i 10-tals systemet:
1923

Get ready.. here it comes:
19-19-19-19-19-120-Press any key to continue
Avatar billede mickni33 Nybegynder
22. november 2001 - 12:33 #6
Kiggede lige en gang til mit kode stump virker ikke fordi rest ikke kan indholde to værdier. Nå pyt.
Men jeg tror dit program er rigtig nok. det er nok den % der driller da det godt kan være forvirrende at bruge modulus (%) da den udskriver den rest der er tilbage efter udregningen
Avatar billede phpnewbie Nybegynder
22. november 2001 - 12:38 #7
den skal udskrive resten.... skal lave et program der laver decimal tal om til hex..

så jeg skal bruge resten til at finde ud af tallet . Problemet er at return jo ik gider ?
Avatar billede disky Nybegynder
22. november 2001 - 12:41 #8
prøv med:

long eksponent(int tal1, int tal2)
{
  int i;
  long result = tal1;
  for(i=1;i<=tal2;i++)
  {
    //printf(\"%d\\n\", result);
    result = result * tal1;
  }
  return result;
}

Avatar billede mickni33 Nybegynder
22. november 2001 - 12:41 #9
måske dette med parenteser

rest = number% (eksponent(16/i));

Avatar billede phpnewbie Nybegynder
22. november 2001 - 13:29 #10
jeg fik det fixed.. tak for hjælpen.. :D
i kan dele de points-.
Avatar billede phpnewbie Nybegynder
22. november 2001 - 13:30 #11
Jo tak for hjælpen..
Avatar billede mickni33 Nybegynder
22. november 2001 - 13:39 #12
så skal du trykke på knappen <<avanceret>> nederst på siden så kan du selv give de point som du syntes
Avatar billede mickni33 Nybegynder
22. november 2001 - 13:39 #13
sorry så ikke du gav point
Avatar billede soepro Nybegynder
22. november 2001 - 14:00 #14
Du får simpelthen overflow på din temporære variabel ! Denne funktion virker op til 1E+99:

double eksponent(int base, int exp)
{
  double temp = 1;
  for (int idx = 0; idx <= exp; idx++)
    temp *= base;
  return temp;
}

du kan fint skrive

rest = number % eksponent(16, i);

Hvis du vil oversætte en alm. integer til hex, er det meget nemmere at skrive:

char buffer[65];
sprintf(buffer, \"%X\", number);

du kan så pille de forkellige cifre ud, og oversætte til decimal tal vha.

for (int idx = 0; idx < strlen(buffer); idx++)
  cprintf(\"%d\", (int)(buffer[idx]-\'0\'));

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