Stránka 1 z 1

C+ Help

Napsal: 11 kvě 2014 22:41
od Mikael1735
Zdravim, sem v programování začátečník a potřeboval bych pomoct se skriptem. Mám za úkol:
Napište program, který otestuje generátor náhodných čísel od 0 do 9. Program vygeneruje n-krát náhodné číslo z rozsahu 0 až 9 (n je zadáno z klávesnice) a uloží si do pole absolutní četnosti jednotlivých generovaných čísel. Na obrazovku vypíše tabulku s absolutními a relativními četnostmi.
První část mám, ale nevim jak na tabulku.
Popřípadě jakoukoliv kritiku přijímám.

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

#define random(num) (rand()%(num))

void randomize(void)
{
srand((unsigned) time(NULL));
}
int main(int argc, int i, int n, char **argv)
{
printf("Nahodna cisla od 0 do 9\n");
scanf("%d",&n);
for(i=0; i<n; i++)
printf("%d\n", rand()%10);
system("PAUSE");
return 0;
randomize();
}

Re: C+ Help

Napsal: 11 kvě 2014 23:07
od faraon
To C+ má být C nebo C++? Program máš sice v Céčku, ale pro jistotu se ptám.

Kde jsi viděl tohle?

Kód: Vybrat vše

int main(int argc, int i, int n, char **argv)

To v závorce jsou argumenty předávané z příkazové řádky, a mají vypadat takhle:

Kód: Vybrat vše

int main(int argc, char **argv)

Nebo takhle, což je v podstatě totéž:

Kód: Vybrat vše

int main(int argc, char *argv[])

Jenže ty je v tomhle programu určitě používat nebudeš, takže stačí když překladači sdělíš že program nic přijímat nemá:

Kód: Vybrat vše

int main(void)

Ty lokální proměnné i a n si pak deklaruješ až uvnitř main(), takže za složenou závorkou {.

Nejdřív si musíš do pole sečíst kolikrát ti které číslo padlo:

Kód: Vybrat vše

int i,n,cislo,pole[10];

for (i=0; i<n; i++)
    {
    cislo=random(10);
    ++pole[cislo];
    }

Samozřejmě je potřeba to pole nejdřív naplnit nulami, buď přímo v inicializaci nebo pomocným cyklem na začátku programu.

A na konci programu to pole normálně vypíšeš dalším cyklem, aby ti vyšlo něco jako tabulka:

Kód: Vybrat vše

Četnost čísel:
0: 85
1: 64
2: 105
3: 92
4: 69
5: 81
6: 91
7: 90
8: 85
9: 73


A to randomize() dej na začátek programu, takhle by ti nebylo nic platné. Ty musíš seed nastavit ještě předtím než poprvé použiješ rand(), a navíc ho máš až za returnem, který ti program ukončí, takže by se vlastně vůbec nevykonal.

Kdo ten název vymyslel? Příkaz RANDOMIZE jsem používal před lety v BASICu :)

Re: C+ Help

Napsal: 11 kvě 2014 23:19
od Mikael1735
Díky kouknu na to a poupravim.. dělám to v Dev C++ ale je to jen C.

Toto bylo v příloze úkolu jak máme začít:
int main(int argc, char **argv) to int i a n sem si tam přidal já.

Název RANDOMIZE je také uveden u tohoto úkolu a vymyslel ho jeden pan profesor na ČVUT FD a ostatní profesoři se toho drží.

Re: C+ Help

Napsal: 11 kvě 2014 23:37
od faraon
Tak to jsi je přidal na špatné místo, takhle bys to rozbil.

Kdyžtak si zapamatuj tuhle kostru, to je první věc co si napíšu když začínám nějaký program:

Kód: Vybrat vše

#include <stdio.h>

int main(void)
    {
    /* proměnné */

    /* kód */

    return 0;
    }

To je minimum aby se to dalo zkompilovat, pak už jen místo těch komentářů přidávám co je potřeba.

Řekl bych že on ten název skutečně nevymyslel, jen použil to co znal z dřívějška. Zajímalo by mě na kterém osmibitovém mikropočítači kdysi začínal: http://en.wikibooks.org/wiki/BASIC_Prog ... Generation :lol:
Jo, já to dělám zrovna tak.