Diskuze: Problem se zjistovanim intervalu v generatoru nahodnych cisel
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.


Zobrazeno 18 zpráv z 18.
K personalizaci obsahu a reklam, poskytování funkcí sociálních médií a analýze naší návštěvnosti využíváme soubory cookie. Informace o tom, jak náš web používáte, sdílíme se svými partnery pro sociální média, inzerci a analýzy. Partneři tyto údaje mohou zkombinovat s dalšími informacemi, které jste jim poskytli nebo které získali v důsledku toho, že používáte jejich služby.
Používáme nezbytné cookies pro fungování webu a s tvým souhlasem také analytické a marketingové cookies.
Zajišťují základní funkce, bezpečnost a služby, které sis vyžádal. Nelze je vypnout.
| Služba | Poskytovatel | Účel | Cookies a úložiště | Doba uložení |
|---|---|---|---|---|
| ITnetwork | ITnetwork | Provoz webu, relace, přihlášení a uložení nastavení cookies. | PHPSESSID, auth_token, sid, itn_consent_impression, __Host-itn_consent | Relace až 1 rok |
| Google Tag Manager | Správa značek a načítání měřicích nástrojů webu. | Žádné | Neukládá se | |
| Google Fonts | Načítání typografie webu. | Úložiště řízené poskytovatelem | Dle podmínek poskytovatele | |
| Google Hosted Libraries | Načítání potřebných knihoven a stylů webu. | Úložiště řízené poskytovatelem | Dle podmínek poskytovatele | |
| Google reCAPTCHA | Ochrana formulářů a webu před zneužitím. | _GRECAPTCHA, rc::a, rc::b, rc::c, rc::f | Relace až 180 dní | |
| YouTube | Přehrávání vloženého video obsahu. | localStorage, IndexedDB; cookies after playback interaction | Relace až trvalé úložiště | |
| Vimeo | Vimeo | Přehrávání vloženého video obsahu. | __cf_bm, _cfuvid, vuid, localStorage, IndexedDB | Relace až 2 roky |
| Facebook Login | Meta | Přihlášení pomocí účtu třetí strany. | Úložiště řízené poskytovatelem | Relace až 1 rok |
| GoPay | GoPay | Zpracování uživatelem vyžádané platby. | Úložiště řízené poskytovatelem | Dle podmínek poskytovatele |
Pomáhají nám porozumět používání webu a zlepšovat ho.
| Služba | Poskytovatel | Účel | Cookies a úložiště | Doba uložení |
|---|---|---|---|---|
| Google Analytics 4 | Měření návštěvnosti a používání webu. | _ga, _ga_* | Až 2 roky | |
| Microsoft Clarity | Microsoft | Měření návštěvnosti a používání webu. | _clck, _clsk, _cltk | Relace až 1 rok |
Slouží k měření kampaní, personalizaci reklamy a marketingové komunikaci.
| Služba | Poskytovatel | Účel | Cookies a úložiště | Doba uložení |
|---|---|---|---|---|
| Google Ads | Měření kampaní, reklama a remarketing. | _gcl_au, _gcl_ls | Relace až 90 dní | |
| Meta Pixel | Meta | Měření kampaní, reklama a remarketing. | _fbp, _fbc, localStorage | Až 90 dní |
| Sklik | Seznam.cz | Měření kampaní, reklama a remarketing. | retargeting, sid, szn:* | Relace až trvalé úložiště |
| LinkedIn Insight | Měření kampaní, reklama a remarketing. | bcookie, li_gc, lidc, __cf_bm | Relace až 1 rok | |
| Ecomail | Ecomail.cz | Měření kampaní, reklama a remarketing. | ecmid, Úložiště řízené poskytovatelem | Dle podmínek poskytovatele |
| Atribuce kampaní ITnetwork | ITnetwork | Přiřazení návštěvy a objednávky ke kampani. | campaign_clid[*], user_session_context | Až 1 rok |
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.


Nastav hodnotu proměnné soucet na 0. V cyklu o deseti opakování proveď následující příkazy. Přiřaď proměnné rnd vygenerované náhodné číslo v rozsahu. Pokud proměnná splňuje podmínku intervalu, přičti její hodnotu k proměnné soucet.
soucet += rnd
Vypiš proměnnou soucet na obrazovku.
Sub Main()
Dim random As New Random()
Dim soucet As Integer = 0
Dim rnd As Integer
For a As Integer = 1 To 10
Console.WriteLine(random.Next(-90, 101))
If rnd > 10 AndAlso rnd < 50 Then
soucet += rnd
End If
Next
Console.WriteLine()
Console.WriteLine(soucet)
Console.ReadKey()
End Sub
Porad mi to pise nulu, nevim, co s tim.
Nepřiřazuješ proměnné rnd vygenerované číslo v daném rozsahu.
Podívej na úryvek kódu psaném v C.
int soucet = 0;
for(int i = 0; i < 10; i++){
rnd = rand_range(-90, 101);
if((rnd >= 10)&&(rnd <= 50)) soucet += rnd;
}
printf("%d", soucet);
Sub Main()
Dim random As New Random()
Dim soucet As Integer = 0
For a As Integer = 1 To 10
Dim rnd = random.Next(-90, 101)
If ((rnd >= 10) AndAlso (rnd <= 50)) Then
soucet += rnd
End If
Next
Console.WriteLine()
Console.WriteLine("{0}", soucet)
Console.ReadKey()
End Sub
Tak ted uz to nefunguje vůbec, ja nevim, co delam spatne.
Pokud něco nefunguje, tak je třeba ladit. Dále je dobré být konkrétnější (program nejde spustit, chybná hodnota, dochází k pádu aplikace, apod.). V prvé řadě je třeba najít místo kde se chyba vyskytuje. Vypisuj si obsahy proměnných. Ověř si, zdali Ti funguje generování náhodných čísel. Rovněž by Ti měl být jasný princip, jak mnou prezentovaný úryvek kódu funguje.
Nekódil som ešte vo Visual Basicu ale podľa zvyšku kódu by som povedal, že aj tu treba povedať aký dátový typ má byť premenná rnd
Dim rnd = random.Next(-90, 101)
kód vyššie by som zmenil na
Dim rnd As Integer = random.Next(-90, 101)
Sub Main()
Dim random As New Random
Dim pocetCiselVIntervalu = 0
For i As Integer = 0 To 9
Console.WriteLine(random.Next(-90, 101))
Dim interval As Integer = random.Next(-90, 101)
If interval >= 10 And interval <= 50 Then
pocetCiselVIntervalu += interval
End If
Next
Console.Write("{0}", pocetCiselVIntervalu)
Console.ReadKey()
Vsechno mozne vyzkousene, ted uz to pro zmenu neplive 0 v
poctuCiselVIntervalu, ale rovnou si to vyhodi nahodne číslo, proste nejake.
No nic, budu rad, když se nakonec ukaze spasitel, který mi rekne, ze jsem
debil, hodi sem nejake dvouradkove reseni a ja budu konecne vedet jak na to.
Ale i tak diky za snahu, ale
problém to nevyresilo
Veď v zadaní píšeš že máš zistiť SÚČET čísiel ktoré sú v tom intervale a nie ich počet, takže to máš takmer dobre len namiesto
Console.WriteLine(random.Next(-90, 101))
Daj
Console.WriteLine(interval)
Ale daj to až pod ten riadok kde to číslo generuješ. Potom si spočítaj čísla ktoré sú v intervale <10, 50> a porovnaj s tým čo máš v pocetCiselVIntervalu.
Teraz vypisuješ iné náhodne čísla než v skutočnosti kontroluješ lebo ich generuješ dva krát
Jo to je tak když se pořád něco mění. Ta proměnná pojmenovaná soucet
tam nebyla jen tak. Pokaždé různé způsoby deklarace, různé způsoby
výpisů, různé řídící příkazy.. Syntax jazyka je take super. Pro
deklaraci proměnné skoro nestačí řádek, random.next(x,y) - je jasný že
jde o interval nebo Console.Write("{0}", pocetCiselVIntervalu) - také jasné,
že jde o výpis celočíselné hodnoty. 
Díky, zítra to vyzkouším, teprve měsíc a nějaké drobné se to učím a zrovna kombinaci FOR + RND dělám úplně poprvé. Pro mě je to daleko chaotičtější.
Vyzkoušej to ještě dnes ať můžeš v klidu spát. Je to otázkou 10s. Jinak cyklus s náhodnými čísly vůbec nesouvisí, je to stejné jako jakýkoli jiný příkaz. Máš pocit že je to chaotické, protože ještě nemáš dostatek zkušeností. Ale to přijde..
Se spánkem problém mít nebudu problém, ale můj problém je stejně nevyřešený, teď už to dává součet (děkuji moc, to se bude rozhodně někdy hodit), ale mě zajímal počet, že když vygeneruje 10 náhodných čísel a z toho 2 budou třeba 20 a 30, tak mi to vypíše 2. Teď mi to vypisuje 50. Čili součet. Ale i tak díky, fakt v tom plavu a skripta stojí za starou belu.
Sub Main()
Dim random As New Random
Dim pocetCiselVIntervalu = 0
For i As Integer = 0 To 9
Dim interval As Integer = random.Next(-90, 101)
If interval >= 10 AndAlso interval <= 50 Then
pocetCiselVIntervalu += interval
End If
Console.WriteLine(interval)
Next
Console.WriteLine("Pocet cisel v intervalu 10 az 50 = {0}", pocetCiselVIntervalu)
Console.ReadKey()
End Sub
Ted to dava soucet tech nahodnych cisel, které se ocitnou v intervalu 10 az 50, coz je super, diky moc, ale spatne jsem svůj dotaz formuloval, za to se omlouvam, me zajima počet cisel v intervalu, cili at uz to je 10,20,30, proste at mi to vyplivne ten počet, ne soucet. Rad bych s tim nikoho neotravoval a poradil si sam, ale fakt netusim jak dal, zatím se mi to dařilo svepomoci jenom zhoršovat.
Pardon, ale jelikož jsem osel, tak se chci opravit. V zadani mělo byt pocet
cisel v intervalu. Ono i slovo soucet je spravne, pokud z deseti nahodnych cisel
byly 2 v intervalu 10 - 50, tak soucet poctu cisel v intervalu je 50, ale
zjistuji, ze v programovani a na forech se clovek musí vyjadřovat jinak,
cestina je zradna, mam s tim dokola problem. 
No, už dělám i chyby v komentářích, místo součet 50 mělo být 2.
Doporučuji se na vyjadřování se více zaměřit, zamezíš tak mnoha problémům v důležitějších věcech nežli je tato úloha. Pojmy součet a počet jsou odlišné. Pro oboje platí akorát to, že proměnná, která bude pro daný výpočet použita, musí být inicializována na 0. Pak platí:
pocet += 1
soucet += generovane_cislo_splnujici_podminku_intervalu
Pozn: Dobře zvolené jméno proměnné odpovídající jejímu významu je pro úspěch zásadní.
No nic, zítra to zkusím, ale stejně mám obavu, že to nakonec budu muset vidět napsané celé. Přesto díky
Zobrazeno 18 zpráv z 18.