Avatar billede nomak Nybegynder
13. maj 2003 - 17:42 Der er 14 kommentarer og
1 løsning

mangler en floor funktion

Hvis den ikke allerede findes i en .h fil, så ved jeg sgu ikke hvordan den skal laves..

hvis man har et tal "123.562" skal den laves om til "123"..

funktionen findes i javascript, så i kan godt sammenligne med den..

any ideas ?
Avatar billede gumbert Nybegynder
13. maj 2003 - 17:51 #1
er tallet en tekstreng??
Avatar billede arne_v Ekspert
13. maj 2003 - 17:54 #2
#include <math.h>

double floor(double x);
Avatar billede arne_v Ekspert
13. maj 2003 - 18:00 #3
Og hvis du undrer dig over at de returnerer double, så er det fordi
at hvis du skal have en int så assigner du bare (eller eksplicit
type caster).

int i = x;

int i = (int)x;
Avatar billede nomak Nybegynder
13. maj 2003 - 19:19 #4
arne_v -> kan du ikke prøve at sætte det ind i det her:

#include <stdio.h>

int main() {
  int tid = 321324;

  int minutter = floor(tid/60);
return 1;
}
Avatar billede arne_v Ekspert
13. maj 2003 - 19:23 #5
Hvorfor overhovedet bruge decimal tal eller floor ?

#include <stdio.h>

int main() {
  int tid = 321324;
  int minutter = tid/60;
  printf("%d\n",minutter);
  return 0;
}

virker det ikke ?
Avatar billede nomak Nybegynder
13. maj 2003 - 19:27 #6
321324/60 = 5355,4 ? det er da et decimal tal
Avatar billede arne_v Ekspert
13. maj 2003 - 19:31 #7
321324/60 = 5355 i C, C++, Java, Fortran
321324/60 = 5355.4 i Pascal (og måske i JavaScript men det kender jeg ikke)
Avatar billede arne_v Ekspert
13. maj 2003 - 19:32 #8
Hvis du i C har en int / en int, så får du en int (som er det
"ægte" resultat nedrundet).
Avatar billede nomak Nybegynder
13. maj 2003 - 19:43 #9
nu har jeg så prøvet mig lidt frem og kommet til følgende..

det giver ingen fejl når jeg compiler, men når jeg kører det, giver det en Bus Error..

#include <stdio.h>

char *str_uptime(int a) {
  char *output;
  int tid = a/1000;
  int dage = tid/(24*60*60);
  int timer = (tid%(40*60*60))/(60*60);
  int minutter = (tid%(60*60))/60;
  int sekunder = tid%60;
  sprintf(output, "%d dage, %d timer, %d minutter og %d sekunder\n",dage, timer, minutter, sekunder);

  return output;
}

int main() {
  char tiks[5000];

  tiks = str_uptime(20908374);

  printf("%s\n", tiks);
  return 0;
}
Avatar billede arne_v Ekspert
13. maj 2003 - 19:47 #10
Ja.

Du bruger en uinitialiseret pointer !

Jeg prøver lige at lave et virkende eksempel.
Avatar billede arne_v Ekspert
13. maj 2003 - 19:49 #11
#include <stdio.h>
#include <string.h>

char output[100];

char *str_uptime(int a) {
 
  int tid = a/1000;
  int dage = tid/(24*60*60);
  int timer = (tid%(40*60*60))/(60*60);
  int minutter = (tid%(60*60))/60;
  int sekunder = tid%60;
  sprintf(output, "%d dage, %d timer, %d minutter og %d sekunder\n",dage, timer, minutter, sekunder);
  return output;
}

int main() {
  char tiks[100];
  strcpy(tiks,str_uptime(20908374));
  printf("%s\n", tiks);
  return 0;
}

giver:

0 dage, 5 timer, 48 minutter og 28 sekunder
Avatar billede arne_v Ekspert
13. maj 2003 - 19:50 #12
2 ændringer:

* output er nu et array i.s.f. en pointer

* jeg bruger strcpy til assignment nede i main
Avatar billede segmose Nybegynder
14. maj 2003 - 09:06 #13
Arne må jeg spørge dig om dit design choise her?
hvorfor er str_uptime lavet non reentrant? (bruger global)
hvorfor har du valg at lave den ekstra copy i main istedet for at overføre en pointer til target? (str_uptime(int uptime, char *dest))
Avatar billede arne_v Ekspert
14. maj 2003 - 12:34 #14
Ikke mit design choice.

Det var sådan den oprindelige funktion så ud. Jeg lavede
en funktion der virkede med præcis samme signatur.

Man kan udmærker argumentere for bedre måder at lave det på
(der er dog en del af C's standard funktioner der har
de samme problemer).
Avatar billede segmose Nybegynder
15. maj 2003 - 08:47 #15
#include <stdio.h>
#include <string.h>

char *str_uptime(int a, char *output) {
  int tid = a/1000;
  int dage = tid/(24*60*60);
  int timer = (tid%(24*60*60))/(60*60);  // 40 her skulle vist være 24
  int minutter = (tid%(60*60))/60;
  int sekunder = tid%60;
  sprintf(output, "%d dage, %d timer, %d minutter og %d sekunder\n",dage, timer, minutter, sekunder);
  return output;
}

int main() {
  char tiks[100];
  strcpy(tiks,str_uptime(20908374, tiks));
  printf("%s\n", tiks);
  return 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