Avatar billede homemicky Nybegynder
29. september 2002 - 09:52 Der er 8 kommentarer og
1 løsning

C programmering

Hej allezusammen

Jeg er i gang med at lave et program i C,  som kan randomize, men jeg kan ikke helt få det til at virke. man skal kunne indtaste et mintal og max tal og så skal den randomize indenfor min og max. Jeg er ved at gå amok over dette er der nogen der kan hjælpe.
Avatar billede driis Nybegynder
29. september 2002 - 12:59 #1
Nemt nok:

#include <cstdlib>
#include <ctime>
#include <iostream>

using namespace std;

int tilf(int,int);

int main ()
{
        int max=100,
        int min=1;

    srand ( time(0) ) ;  // Seed rand kun nødvendigt én gang i programmet.

        cout << "Dit tilfældige tal mellem 0 og 100: " << tilf(min, max);
}

int tilf(rMin, rMax)
{
    return rMin + ( rand() % (rMax - rMin));
}
Avatar billede mbulow Nybegynder
29. september 2002 - 15:01 #2
Og så lige en version med et par små ændringer ;)

1) Det der var vist ikke lige C, men nærmere C++
Jaja... Ved det godt der er mange spørgere der blander C og C++ sammen, hvilket jeg er helt enig i, men nu er vi ihvert fald sikre :)

2) Beregningen af tallet er ikke HELT fin, men næsten ;)
Den beregning vil aldrig kunne give 'max'. For at kunne få værdien 'max' skal der lægges 1 til 'max' i beregningen...
Årh ja det lød knudret... Men se i min kode, hvad jeg mener :)

3) Jeg prøvede lige efter (i en C++ kompiler), og blev overrasket over at man faktisk kunne slippe godt fra ikke at lave en 'return 0' i en main-funktion der returnerer en int :/
Kan man være sikker på at slippe godt fra det i alle kompilere?
Ved det ikke, men smed den lige på for en sikkerheds skyld :)



#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main(int argc, char *argv[]){
    int min;
    int max;
    int res;

    printf("Indtast min: ");
    scanf("%d", &min);

    printf("Indtast max: ");
    scanf("%d", &max);

    srand((unsigned)time(NULL));

    res = min + (rand() % (max+1 - min));

    printf("Resultat: %d\n", res);

    return 0;
}
Avatar billede homemicky Nybegynder
29. september 2002 - 15:06 #3
tusinde tak!
Avatar billede homemicky Nybegynder
29. september 2002 - 15:23 #4
nbulow kunne jeg få forklaret srand((unsigned)time(NULL));
Avatar billede homemicky Nybegynder
29. september 2002 - 15:25 #5
Efter jeg slettede return 0; og det efter int main, så virkede det tak!
Avatar billede homemicky Nybegynder
29. september 2002 - 15:27 #6
Undkyld mbulow men det var faktisk dig der skulle have haft pointene.
Avatar billede driis Nybegynder
29. september 2002 - 16:04 #7
homernicky>> Beklager fejlene i min første besvarelse, men jeg skrev bare et hurtigt eksempel ... og havde ikke lige en C++ compiler til rådighed på det tidspunkt. Jeg er selv mere eller mindre 'newbie' til C++, men tænkte 'Jubii, her er et spørgsmål, jeg kan besvare' ;-)

Naturligvis skal main sluttes af med return 0. Desuden havde jeg glemt at initialisere variablene i funktionen tilf. Og endelig, skal der naturligvis lægges én til, som mbulow også ganske rigtigt skriver. Nedenstående kode virker:

#include <cstdlib>
#include <ctime>
#include <iostream>

using namespace std;

int tilf(int,int);

int main ()
{
        int max=100,
        int min=1;

    srand ( time(0) ) ;  // Seed rand kun nødvendigt én gang i programmet.

        cout << "Dit tilf\x91ldige tal mellem 0 og 100: " << tilf(min, max);
        return 0;
}

int tilf(int rMin, int rMax)
{
    return rMin + ( rand() % (rMax - rMin + 1));
}
Avatar billede mbulow Nybegynder
29. september 2002 - 16:08 #8
Point: Det er ligemeget :) driis kom med svaret... Jeg kom bare med et par små rettelser/kommentarer. Derfor JEG kun oprettede som en kommentar og ikke et svar :)

srand:
------
Den srand jeg lavede, er i bund og grund magen til driis'.

Forklaring:
-----------
Lad og sige at du KUN bruger rand-funktionen i din program. Så vil dine tilfældige tal, følge det samme mønster hver gang du kører programmet.
Ved at kalde srand, fortæller man at rand-funktionens beregninger skal tage udgangspunkt i et bestemt tal, og for at være sikker på at dette udgangspunkt også varierer, vælger jeg at lade det være tiden (time-funktionen).

Grunden til at den ser lidt anderledes ud end driis', er at jeg bare lavede en hurtig copy/paste af den linje, fra et andet eksempel :)



Return 0 og main???
-------------------
Mener du at det som jeg postede IKKE virkede, før du slettede:
  int argc, char *argv[]
og
  return 0;
???

Hvis ja... Kan du så ikke lige fortælle mig hvilken kompiler (og operativsystem) du bruger, for jeg skulle da mene at den måde at lave main:
  int main(int argc, char *argv[]){
    return 0;
  }
er en del af ANSI-C standarden

Jeg tvivler ikke på at det kan være rigtig, men så har jeg bare misforstået noget, som jeg lige vil kigge lidt nærmere på :)
Avatar billede homemicky Nybegynder
29. september 2002 - 16:25 #9
Jeg windows 2000 og en skole cd turbo C++ IDE ikonet, og inde i programmet turbo c++ version 3.0

Ja det virkede ikke, grundet til at jeg spurgte det var at det er et eksamensprojekt, og og skal vide hvad der står linie for linie. men det var lige det der argc, som jeg ikke havde set før.

Jeg begyndte som IT-supporter århus tekniske skole. og sgu ligesom et selvstudium. føler jeg. Så jeg kommer nok til at bruge eksperten lige i denne uge meget, når deadline er i næste uge samt eksamner.

Det skal lige siges at det bliver til et gætteprogram til sidst, når jeg når så langt.

Det sgu sjovt det her c programmering, og bliver helt bidt af det når det virker, men hvis ikke er det bare noget lort!

tak mbulow
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