Matematické Fórum

Nevíte-li si rady s jakýmkoliv matematickým problémem, toto místo je pro vás jako dělané.

Nástěnka
22. 8. 2021 (L) Přecházíme zpět na doménu forum.matweb.cz!
04.11.2016 (Jel.) Čtete, prosím, před vložení dotazu, děkuji!
23.10.2013 (Jel.) Zkuste před zadáním dotazu použít některý z online-nástrojů, konzultovat použití můžete v sekci CAS.

Nejste přihlášen(a). Přihlásit

#1 25. 10. 2015 22:47

StupidMan
Příspěvky: 737
Reputace:   
 

C - program vygeneruje posloupnost náhodných čísel z intervalu

Dobrý den,
potreboval bych poradit s timhle prikladem.
zkousel jsem ten kod zkopirovat do Dev-C++ a nefungovalo to. Nevíte prosim kde muze byt chyba?


Příklad 23 z http://jazyk-c.wz.cz/pole.html#pole_zac.
Program vygeneruje posloupnost náhodných čísel z intervalu <-50,50> a vytvoří nové pole takové, že bude mít ve své levé části záporná a v pravé části kladná čísla (i nulu) posloupnosti. Pořadí čísel může být libovolné.

Zdrojový kód:

  #include <stdio.h>
  #define N 10

  int main()
  {
    int pole[N],pom_pole[N],i,indz=0,indk=N-1;
   
    srand( (unsigned) time(NULL) );
    printf("Vygenerovane pole:n");
    for (i=0; i                            - zkoušel jsem tenhle radek smazat a nepomohlo to
        printf(" %d",pole[i]);
       }
    for (i=0; i<N; i++)                 
        if (pole[i]<0)
             {
               pom_pole[indz]=pole[i]; 
               ++indz;
             }
        else
             {
               pom_pole[indk]=pole[i];   
               --indk;
             }
    printf("nPreusporadane pole:n");
    for (i=0; i<N; i++)
      printf(" %d", pom_pole[i]);
    getch();
    return 0;
  }

Offline

  • (téma jako vyřešené označil(a) StupidMan)

#2 26. 10. 2015 10:52

gladiator01
Místo: Jindřichův Hradec
Příspěvky: 1587
Škola: ZČU FAV - SWI
Pozice: absolvent
Reputace:   53 
Web
 

Re: C - program vygeneruje posloupnost náhodných čísel z intervalu

chybi pulka toho for cyklu - to ti asi došlo, že je špatně

Code:

for (i=0; i

potom knihovny:

Code:

#include <stdlib.h>     /* srand*/
#include <time.h>       /* time */
#include<conio.h>    /*getch*/

chtělo by to číst hlášky, které dev píše


Naděje jako svíce jas, potěší srdce štvané, čím temnější je noční čas, tím zářivěji plane.
VIVERE - MILITARE EST (Seneca)
Vím, že nic nevím. - Sokrates

Offline

 

#3 26. 10. 2015 19:05

StupidMan
Příspěvky: 737
Reputace:   
 

Re: C - program vygeneruje posloupnost náhodných čísel z intervalu

dobrý den,

na googlu jsem vygooglil Eratostenovo sito. Pochopil jsem ten princip, ale kdyz jsem se podival na ten kod, tak nechápu jak to pracuje. Můžete mi prosim vysvetlit krok po kroku, jak ten program pracuje?
Označil jsem 3 body, který jsem nepochopil.

u bodu číslo 1 nvm co dela tu část co jsem cervene zakroužkoval.
bod č. 2. - slouzik tomu, aby program vynechal nulu? Co dela druhy "for" v teto bodě?
bod č. 3. - tady vim jenom ze neco vytiskne, ale uz nvm proc tiskne jenon když je tam cisla[i] == 1

//forum.matweb.cz/upload3/img/2015-10/82003_222.png

Offline

 

#4 26. 10. 2015 19:32

LukasM
Příspěvky: 3274
Reputace:   193 
 

Re: C - program vygeneruje posloupnost náhodných čísel z intervalu

↑ StupidMan:
Pokud sis nastudoval princip Eratosthenova síta a stejně tomu kódu rozumíš až tak málo, doporučuji se vrátit k jednodušším příkladům. Program pracuje s polem cisla, do kterého ukládá pouze jedničky a nuly. Cílem je označit jedničkou ty prvky pole, které jsou na prvočíselné pozici. Takže třeba jednička na pozici 5 bude znamenat, že pětka je prvočíslo.

Krok 1: všechny prvky pole od dvojky dál se naplní jedničkami - jakoby všechna čísla byla prvočísla
Krok 2: pole se prochází krok po kroku až po index $\sqrt{N}$, když najdu něco co je označené jako prvočíslo, projedu všechny jeho celočíselné násobky a označím je jako neprvočísla (to dělá ten druhý cyklus). Neprvočísla přeskakuju (to dělá to continue).
Krok 3: vypíše indexy těch prvků pole, ve kterých zůstala jednička. Ty odpovídají nalezeným prvočíslům.

Offline

 

#5 26. 10. 2015 20:21

StupidMan
Příspěvky: 737
Reputace:   
 

Re: C - program vygeneruje posloupnost náhodných čísel z intervalu

↑ LukasM:

proc u toho 2 kroku prochazi do $\sqrt{N}$ a ne do N?

Offline

 

#6 26. 10. 2015 20:37 — Editoval LukasM (26. 10. 2015 20:41)

LukasM
Příspěvky: 3274
Reputace:   193 
 

Re: C - program vygeneruje posloupnost náhodných čísel z intervalu

↑ StupidMan:
Každé složené číslo je podle definice součinem jiných prvočísel. Pokud je nějaké složené číslo menší než N, nějaký ten faktor musí být určitě menší než $\sqrt{N}$ - v opačném případě by součin byl větší než N. Takže jakmile dojedeme k $\sqrt{N}$, určitě jsme to číslo už vyškrli, protože ten nejmenší faktor je za námi. Takže dál by to bylo plýtvání časem. Každá další iterace toho cyklu už by skončila na tom continue a s polem cisla by se už nestalo nic.

Např. $35=5 \cdot 7$. Jakmile ho vyškrtnu jako násobek pětky, nemusím ho vyhazovat znova jako násobek 7. Ta podmínka s odmocninou říká, od kdy z tohoto důvodu už o žádné další složené číslo nepřijdu.

Offline

 

#7 26. 10. 2015 22:24

StupidMan
Příspěvky: 737
Reputace:   
 

Re: C - program vygeneruje posloupnost náhodných čísel z intervalu

Děkuji za vysvětlení. Kdyby mi někdo takhle hezky vysvětlil i ve škole, měl bych o 90% stresu min.

Offline

 

Zápatí

Powered by PunBB
© Copyright 2002–2005 Rickard Andersson