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.

Člen

Zobrazeno 18 zpráv z 18.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
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.