Diskuze: Dotaz na upravu programu
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.

Člen

Zobrazeno 29 zpráv z 29.
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.
Next vrací jen int, zkus toto:
Dim vzdalenost As Single = rnd.Next(295, 305) / 100.0;
nejsem programator ale napada me rand.NextDouble()*2 + 2. Pokud je to kravina, prosim o opravu, samozrejme cisla je pak mozne zadat jakakoli
Jakym zpusobem napisu program, který ve vystupu vytiskne vzestupne počet hvezd od 1 do 10 a pak sestupne zpet k 1? At delam, co delam, furt mi z toho vychazi na kazdem radku 10 hvezd.
Sub Main()
For a As Integer = 1 To 20
Console.Write("*", a + 1)
For b As Integer = 1 To 10
Console.Write("*", b + 1)
Next
Console.WriteLine()
Next
Console.ReadKey()
End Sub
Jak se to da udelat? Protože ja nemam absolutne zadny napad, jak na to, ani nevim, kde bych něco takového mohl hledat.
Doplň řídící příkazy if-else do for cyklu. Výraz v if otestuješ na hodnotu menší nebo rovno 10. Uvnitř if pak máš for cyklus v rozsahu 1 až aktuální hodnota řídící proměnné, v else pak máš for cyklus v rozsahu 20 - aktuální hodnota řídící proměnné.
Sub Main()
For i As Integer = 1 To 19
For j As Integer = 1 To If(i < 10, i, 20 - i)
Console.Write("*")
Next
Console.WriteLine()
Next
Console.ReadKey()
End Sub
výstup:
*
**
***
****
*****
******
*******
********
*********
**********
*********
********
*******
******
*****
****
***
**
*
Fu, tak to by me ani ve snu nenapadlo, no nic, pravdepodobne to bude něco, co bych si intuitivne nevycucal z prstu, ani kdybych se posral, tak snad to najdu ve skriptech. Diky
Není třeba v tom hledat velkou vědu, já ten kód jen hodně zeštíhlil
použitím ternárního operátoru. Jinak se mu samozřejmě můžeš
vyhnout a to tak, že si zavedeš pomocnou proměnnou např.
pocetHvezd
a pro každý prochod vnějším cyklem ten počet
hvězd dopočítáš, tedy nějak takto:
Sub Main()
For i As Integer = 1 To 19
Dim pocetHvezd As Integer
If (i < 10) Then
pocetHvezd = i
Else
pocetHvezd = 20 - i
End If
For j As Integer = 1 To pocetHvezd
Console.Write("*")
Next
Console.WriteLine()
Next
Console.ReadKey()
End Sub
Aha a jak teda potom udelam, aby mi v kazdem radku geometricky vzrustal počet hvezd od poctu 2 az do Te stredni hodnoty a pak to zase sestoupilo ke dvojce?
Je to pořád stejné.
for (int i = 1; i < 20; i++) {
if (i <= 10) {
for (int j = 1; j <= i; j++) putchar('*');
putchar('\n');
}
else {
for (int j = 1; j <= 20 - i; j++) putchar('*');
putchar('\n');
}
}
Nevím, jestli ti rozumím, naznač jak by měl vypadat výstup.
Sub Main()
For i As Integer = 1 To 19
If i < 10 Then
For j As Integer = 1 To i * i
Console.Write("*")
Next
Else
For j As Integer = 1 To 20 - i Step +1
Console.Write("*")
Next
End If
Console.WriteLine()
Next
Console.ReadKey()
End Sub
Nebudu lhat, ze vim, co delam, ale az na první radek to do pulky dela, co by mělo, ale od poloviny se to prepne zpet do rezimu 10,9...hvezd. Tak se mi z toho vyrodi něco jako mecoun z hvezd.
**
****
********
****************
********************************
****************
********
****
**
třeba
On samotny program funguje, ale mam tady pravdepodobne procvicit 3 varianty, tu, s kterou jste mi uz tady zatím pichli, další, ze na prvním a druhem radku bude *, na tretim a ctvrtem **, atd., na to uz jsem prisel sam a ted zapasim s variantou, kde ma byt na prvním radku **, na druhem ****, tretim ********, atd.
Na tom není nic složitého. Počet hvězd na konkrétním řádku je dáno vztahem 2 na N, kde N je číslo řádku.
V tom prvním mém příspěvku v této diskusi, místo:
For j As Integer = 1 To If(i < 10, i, 20 - i)
zadej:
For j As Integer = 1 To 2 ^ If(i < 10, i, 20 - i)
No, tak ted to ma mecoun i s vlnobitím. Ale i tak dik, aspoň 2 reseni
ze 3, na to treti třeba prijdu jindy.
Tak jsi to buďto blbě popsal, anebo se ti, pro ten velký počet
hvězdiček na řádku, již ty řádky automaticky zalamují. Však si taky
uvědom, že 2 ^ 10 = 1024 hvězd na jednom řádku, to není úplně málo.
Zde máš řešení. Smyslem stále zůstává mít řádky rozděleny na polovinu. Pro každý řádek si pak dopočítat počet hvězd které se mají zobrazit.
int stars, rows = 11;
for (int i = 1; i <= rows; i++) {
if (i <= rows / 2) stars = (int) pow(2, i);
else stars = (int) pow(2, rows - i + 1);
for (int j = 1; j <= stars; j++) putchar('*');
putchar('\n');
}
Ty, ale já jsem úplně v pohodě, jsem rád, že aspoň k něčemu jsem se dopracoval, učím se teprve 2 měsíce programovat, pro mě je to pokrok, to se časem vykrystalizuje.
Dyť nikdo neříká, že nejsi. Nicméně platí to, co jsem napsal, že se ti to asi zalamuje, tak
to bude blbě zadaný, ať už tebou nebo tvým zadavatelem. Prostě je to mrtě
hvězdiček.
On už si zvykl a ví že já mu vše podávám v C. Tím získá povědomí
o tom jak to funguje, aniž bych mu to dodal na zlatém podnose.
Uprimne, me ty programy pripadaji všechny uplne stejne, akorát se lisi nektere nazvy, semtam syntax, ale algoritmus zustava u tech vyssich programu, alespoň ted v tech začátcích v mych ocich uplne stejny. Takze jestli to dostanu v C, nebo v C#, nebo ve VB, mozna dokonce i v Jave, to vyjde na stejno.
Však také spousta těchto jednoduchých programů lze řešit pomocí příkazů, které jsou pro všechny tyto jazyky společné. Pro všechny zůstává stejné dojít úspěšně k výsledku. Až se naučíš víc, zjistíš, jak který nástroj se na co hodí a jaká jsou jeho omezení. Každopádně to že Ti to připadá stejné, je dobře a může se Ti to v budoucnu hodit, až se budeš chtít orientovat ve zdrojových kódech psaných v jiných jazycích.
Cau, mohl bys mi opet nejak rozumne poradit, jak mam postupovat? Poněvadž si vůbec nevim rady. Mam vygenerovat 100 nahodnych cisel 1-5 a zjistit, zda jsou nekdy vedle sebe dve stejna, když ano, tak která a jake je jejich poradove číslo.
Sub Main()
Dim rnd As New Random, poradi As Byte
For i As Integer = 1 To 100
Dim nahodne As Integer = rnd.Next(1, 5)
If nahodne = nahodne Then
poradi = i
End If
Next
End Sub
To je přeci jednoduché, nehledej v tom nic složitého. Pomocí for cyklu naplníš 100 prvkové pole vygenerovanými náhodnými čísly a poté provedeš opět pomocí for v rozsahu první až předposlední na rovnost hodnoty na daném indexu a na následujícím indexu. Pokud jsou si rovny, vypíšeš hodnotu na jednom z nich a vypíšeš oba indexy. To je celé...
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define SIZE 100
int main(void) {
int nums[SIZE];
srand((unsigned int)(time(NULL)));
for (int i = 0; i < SIZE; i++) nums[i] = (rand() % 5) + 1;
for (int i = 0; i < (SIZE - 1); i++) {
if (nums[i] == nums[i + 1]) {
printf("%d [%d][%d]\n", nums[i], i, i+1);
}
}
return 0;
}
Zobrazeno 29 zpráv z 29.