Diskuze: Zjistovani opakovani cisla z prvniho cyklu v dalsich cyklech
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.


DarkCoder:20.5.2020 13:27
Vždyť to zadání je jasné. V cyklu budeš načítat čísla a ukládat si je do pole. Pokud bude zadána 0 tak se načítací cyklus ukončí. Poté necháš uživatele načíst číslo a zjistíš kolikrát je toto číslo v poli. Výsledek vypíšeš.
Pozn: Nikde se nepíše o tom, že máš nechat uživatele zadat počet čísel které se mají načíst.
Matúš Olejník:20.5.2020 14:04
Chvíľu s tým treba aj bojovať a googliť než že budeš na každý jeden
príklad vytvárať príspevok.
Asi môj prvý program vo VB snáď bude fungovať
Imports System.Collections.Generic
Module VBModule
Sub Main()
Dim inputNumbersCountMap As New Dictionary(Of Integer, Integer)
Dim inputNumber as Integer
Dim numberToCheck as Integer
While 1 = 1
Console.WriteLine("Zadaj cislo")
inputNumber = Integer.Parse(Console.ReadLine())
If inputNumber = 0 Then
Exit While
End If
If Not(inputNumbersCountMap.ContainsKey(inputNumber)) Then
inputNumbersCountMap(inputNumber) = 1
Else
inputNumbersCountMap(inputNumber) = inputNumbersCountMap(inputNumber) + 1
End If
End While
Console.WriteLine("Zadaj cislo ktoreho pocet chces zistit")
numberToCheck = Integer.Parse(Console.ReadLine())
If Not(inputNumbersCountMap.ContainsKey(numberToCheck)) Then
Console.WriteLine("Zadane cislo nepadlo")
Else
Console.WriteLine("Zadane cislo padlo celkom {0} krat", inputNumbersCountMap(numberToCheck))
End If
Console.ReadKey()
End Sub
End Module
Ondrej Zadrapa:20.5.2020 14:22
Dik za námahu, ale vetvenim bych to vytvoril za moment sam a bez zbytečného opravovani, ja potrebuju zjistit, co všechno umi pole, potažmo jak s nimi vůbec uspesne pracovat, je to peklo. Ale to byl i cyklus For
Ondrej Zadrapa:20.5.2020 14:28
Divej se, včera to trvalo az do vecera mi zjistit, ze celou dobu jsem mel
problém s tim, ze dve hodnoty nepatri do vystupu jedne konzole, az když jsem
pro minimum a poradi udelal dva vystupy konzole zvlast, tak to zacalo fungovat a
prumer jsem ani nemusel slozite vypisovat, stacilo pole.Average() … proto mi
ted tenhle úkol není prilis jasny, zase je to trochu něco jiného, alespoň
mi to tak prijde, zatím mi program neuklada data, nevim, co s tim, když si
najedu na stranky Microsoftu, tak tam je halda informaci, strasna spousta, ale
moje konkretni trable tam nejsou resene, cili reseni je uplne primitivni, nebo
jsem se s nim musel setkat, jenze nevim, kde presne, jestli mam pridat, ubrat,
upravit nejaky cyklus, jeho hodnoty, podmínky, pridat promennou, ubrat,
upravit, atd...
Ondrej Zadrapa:20.5.2020 14:42
Sub Main()
Dim cislo As Integer
Dim pocet As Integer = 0
Dim pokracovat As String = "a"
While pokracovat = "a"
Console.WriteLine("Zadej pocet cisel:")
Dim pocetCisel As Integer = Integer.Parse(Console.ReadLine())
Dim poleCisel() As Integer = New Integer(pocetCisel - 1) {}
For i As Integer = 0 To pocetCisel - 1
Console.Write("Zadejte {0}. cislo: ", i + 1)
cislo = Integer.Parse(Console.ReadLine())
poleCisel(i) = cislo
Next
cislo = 1
For i As Integer = 0 To poleCisel.Length - 1
If cislo = poleCisel(i) Then
pocet = pocet + 1
End If
Next
Console.WriteLine("Pokracovat? (ano = a + enter / ne = enter)")
pokracovat = Console.ReadLine()
End While
Console.WriteLine("Zadane cislo {0} padlo celkem {1}x", cislo, pocet)
Console.ReadKey()
End Sub
Takhle uz to dela, co potrebuju, ale nemyslim si, ze zrovna takhle by to zadavatel chtěl, abych to resil, je tu ještě nejaka jina moznost, jak to udelat, nebo to jinak nejde a zhruba takhle to bylo i myslene s tim vystupem, hodil by se mi subjektivni názor, ja tohle delam poprvé a ze zvyku, ze všechny inicializace (snad to rikam spravne, kdyztak pardon) se delaji az v konzoli, proto mi to zadani nedava smysl a furt se na něco ptam, nebo furt, kdybych se ptal porad, tak mam vlastní oddil na strankach.
Ondrej Zadrapa:20.5.2020 14:47
Omluv to, jestli se vyjadřuju nespravne, nebo dokonce spatne, bohužel, je to moc neznamych věci, v kterých uplne plavu, cili pokud si pletu nazvoslovi, je mi to lito, ale takhle to prozatím zkousit chapat ja. A o podmínky pomoci vetveni je prece Else If, ne? Rozvetvis podmínky do několika vetvi (If, elseIf… ...else), kdy se jedna z nich vykona pote, co zadana hodnota je True nebo False, tak tomu zatím rozumim/nerozumim, rikam, plavu v tom, kdybych v tom neplaval, neptam se.
Matúš Olejník:20.5.2020 15:02
Hej dobre chápeš ale napísal si
ale vetvenim bych to vytvoril za moment sam a bez zbytečného opravovani
keď som ja if else použil len na či do mapy pridať začiatočný počet
alebo zväčšiť aktuálny o 1.
Z toho čo si ty napísal to chápem tak že by si chcel vetviť štyri miliardy
pre každú možnosť z Integeru?
A potom ten kód čo tu zatiaľ máš tak stále sa používateľa na začiatku pýtaš koľko chce zadať čísel, ale pri tom v zadaní, ako už DarkCoder spomenul, máš napísané že načítavaš čísla až dokým sa nezadá 0 takže nevieš dopredu koľko čísel bude zadaných.
DarkCoder:20.5.2020 15:20
Uprimne, nevim, co s tim mam delat, zadani zni: Zadejte několik cisel, ukoncete nulou. Potom zadate nektere z předtím zadanych cisel. Program vypise, kolikrat toto číslo předtím padlo.
Toto byl původní dotaz a Matúš Olejník reagoval na něj správně. Kromě zajímavého způsobu řešení Ti i ukázal, jak ukončit načítací smyčku. Takto je to ze zadání patrné a toto se očekává. Ne že uživatel zadá hodnotu následovanou vstupními daty
ja potrebuju zjistit, co všechno umi pole, potažmo jak s nimi vůbec uspesne pracovat
To je ale úplně jiný dotaz, který je spíše teoretický nežli konkrétní. K tomu je třeba zasednout ke knihám a dalším zdrojům, kde je toto vysvětleno. To je první věc která by měla každého napadnout. Bez znalostí jazyka a technik lze těžko vyřešit reálnou úlohu. Pouze hledat někde hotová řešení není ideální, občas se s tím je třeba poprat. Vždyť přijít na to sám je mnohem hodnotnější než to někde nebo od někoho dostat.
proto mi ted tenhle úkol není prilis jasny, zase je to trochu něco jiného, alespoň mi to tak prijde
Vidíš a já už jen po přečtení zadání jsem v hlavě viděl, jak přesně ten kód bude vypadat. A to proto, že jsem se díky samostatnosti naučil představivosti a schopnosti nalézt řešení.
Ondrej Zadrapa:20.5.2020 15:34
Dobra, zvrhava se to v debatu, kdo co a komu, ja si s tim radsi poradim sam, ale i tak diky.
Ondrej Zadrapa:20.5.2020 15:39
A ted jsem si precetl, ze všechny ulohy cyklu a poli mam vypracovat se
statickym polem o 100 prvcích, kazdopadne s tou nulou to konecne dava smysl.
Matúš Olejník:20.5.2020 15:51
Ja som si dával pauzu od školy tak som niečo napísal aj bez použitia
slovníku
A malo by fungovať pre hocijaký počet
Module VBModule
Sub Main()
Dim writtenNumbers As Integer() = {}
Dim countsOfNumbers As Integer() = {}
Dim numberFound As Boolean = false
Dim indexOfFoundNumber As Integer = -1
Dim inputNumber As Integer
Dim numberToCheck As Integer
While 1 = 1
Console.WriteLine("Zadaj cislo")
inputNumber = Integer.Parse(Console.ReadLine())
If inputNumber = 0 Then
Exit While
End If
For i as Integer = 0 To writtenNumbers.GetUpperBound(0)
If inputNumber = writtenNumbers(i) Then
countsOfNumbers(i) = countsOfNumbers(i) + 1
numberFound = true
Exit For
End If
Next
if Not(numberFound) Then
ReDim Preserve writtenNumbers(writtenNumbers.GetUpperBound(0) + 1)
ReDim Preserve countsOfNumbers(countsOfNumbers.GetUpperBound(0) + 1)
writtenNumbers(writtenNumbers.GetUpperBound(0)) = inputNumber
countsOfNumbers(countsOfNumbers.GetUpperBound(0)) = 1
End If
numberFound = false
End While
Console.WriteLine("Zadaj cislo ktoreho pocet chces zistit")
numberToCheck = Integer.Parse(Console.ReadLine())
For i as Integer = 0 To writtenNumbers.GetUpperBound(0)
If numberToCheck = writtenNumbers(i) Then
indexOfFoundNumber = i
Exit For
End If
Next
If indexOfFoundNumber <> -1 Then
Console.WriteLine("Zadane cislo padlo celkom {0} krat", countsOfNumbers(indexOfFoundNumber))
Else
Console.WriteLine("Zadane cislo si nezadal")
End If
Console.ReadKey()
End Sub
End Module
DarkCoder:20.5.2020 15:52
Zde se můžeš inspirovat. Způsob je trochu jiný než uvedl
Matúš Olejník
Je zde uveden způsob jaký je od tebe nejspíš očekáván (procházení pole
pomocí cyklu).
Opět je třeba dívat se na program tak, aby se pochopila jeho činnost.
#include <stdio.h>
#define SIZE 100
int main(void) {
int cislo, pocet = 0, vyskyt = 0;
int pole[SIZE];
// nacitani cisel do pole s osetrenim rozsahu
do {
printf("Zadej cislo: ");
scanf("%d", &cislo);
if (!cislo) break;
pole[pocet] = cislo;
pocet++;
} while (cislo && (pocet < SIZE));
// Vyzva na cislo jehoz pocty opakovani zjistujeme
printf("\nZadej cislo: ");
scanf("%d", &cislo);
// Zjisteni poctu opakovani zadaneho cisla
for (int i = 0; i < pocet; i++) {
if (pole[i] == cislo) vyskyt++;
}
// Vypis poctu opakovani
printf("Cislo %d se v poli vyskytuje %dx\n", cislo, vyskyt);
return 0;
}
+20 Zkušeností
+2,50 Kč

Ondrej Zadrapa:20.5.2020 19:36
Az me to normalne stve, ale chte, nechte, musel jsem to v podstate sproste obslehnout, jinak sam bych na to urcite neprisel. Dik
Ondrej Zadrapa:21.5.2020 14:57
Dim random As New Random
Dim vsechnyHody As New ArrayList()
Dim pocetHodu As Integer = 0
Dim hod As Integer
Do
Threading.Thread.Sleep(500)
hod = random.Next(1, 7)
If Not vsechnyHody.Contains(hod) Then
vsechnyHody.Add(hod)
pocetHodu += 1
End If
Console.WriteLine(hod)
Loop Until pocetHodu = 6
Console.ReadKey()
End Sub
Jak mam dosáhnout toho, aby to nevygenerovalo dvakrát stejne číslo a jde to udelat i bez ArrayListu?
Ondrej Zadrapa:21.5.2020 15:16
Sub Main()
Dim random As New Random
Dim vsechnyHody(100)
Dim pocetHodu As Integer = 0
Dim hod As Integer
Do
hod = random.Next(1, 7)
Console.WriteLine(hod)
If Not vsechnyHody.Contains(hod) Then
vsechnyHody(hod) = hod
pocetHodu += 1
End If
Loop Until pocetHodu = 6
Console.ReadKey()
Tak, jde to, ale neskonci u 6 hodu, ale pokracuje az dokud nepadne 6, cemuz moc nerozumim, mam pocit, ze jsem zadal hodnoty spravne, jak teda docilim toho, aby se mi cisla neopakovala?
DarkCoder:21.5.2020 15:48
Generování náhodného čísla z rozsahu se dosáhne tak, že se pole o velikosti takové, aby se do něj vešla všechny čísla právě jednou, naplní hodnotami, kde hodnota odpovídá danému indexu. Po vygenerování náhodného čísla se poslední prvek pole uloží na místo, jehož index odpovídá hodnotě posledního čísla. Velikost pole se tak sníží o jedna a následné generovaní náhodného číslo je zprava o jedna menší nežli předchozí generování náhodného čísla.
Ondrej Zadrapa:21.5.2020 15:54
No jo, krásná definice, ale já jsem myslel, že když právě logicky zneguji v podmínce, ale neděje se tak, nebo to alespoň nedělám dobře, protože mi vygeneruje třeba 10 čísel v rozpětí 1-7 a až když dojde na 6, zastaví se, to, že úplně ignoruje pocetHodu, je další věc.
DarkCoder:21.5.2020 16:20
Vypíše Ti to větší počet čísel, protože výpis hodu vypisuješ mimo podmínku jejíž příkazy se ne vždy provedou. Pokud to chceš dělat takto, což je podstatně méně efektivnější varianta, jelikož se program při troše smůly může zacyklit, tak je třeba.
- inicializovat pole o velikosti R - L + 1 (R - hodnota pravé meze, L - hodnota levé meze) hodnotou 0.
- generovat náhodné číslo a zjistit, zda-li na indexu jehož hodnota odpovídá generovanému číslu je 0 či nikoli. Pokud je tam 0, pak to číslo ještě nebylo generováno a číslo vypíšu a nastavím hodnotu 1 na tomto indexu a zvýším hodnotu proměnné počethodů o 1. Pokud tam bude 1, pak číslo už generováno bylo, nic se neprovede a přejde se na další iteraci cyklu.
Takto zajistíš, že se Ti vypíše 6 náhodných čísel, která se neopakují. Ale jak už jsem uvedl, tento způsob je neefektivní z hlediska času, který bude delší než se dojde k výsledku. Doba může být stejná, ale také se výsledku nemusíš dočkat.
Ondrej Zadrapa:21.5.2020 16:35
Tak teda, jak z toho ven, co bude pro mě, jakožto začátečníka lepší si osvojit, zatím totiž čerpám z toho, co jsem našel na netu + to, co jsem se tady přímo dočetl od Tebe, je to dost častý problém, ale všechno je řešeno až příliš složitě.
DarkCoder:21.5.2020 16:51
Mnoho programátoru o podobné technice neví.
Zde je ta méně efektivní varianta. Úryvek kódu generuje náhodná čísla v rozsahu 0-9 včetně. Vypíše se prvních 6 unikátních čísel z tohoto rozsahu. Dále se vypíše, kolik cyklů bylo třeba na vygenerování 6 unikátních čísel. Není zde ošetření na situaci, kdy se již vygenerovaná čísla neustále opakují (počet unikátních čísel menší než 6).
#define SIZE 10
#define POCET_HODU 6
int main(void) {
int hod, cyklu = 0, pocet = 0, pole[SIZE];
srand((unsigned int)(time(NULL)));
for (int i = 0; i < SIZE; i++) pole[i] = 0;
do {
hod = rand() % SIZE;
if (!pole[hod]) {
printf("%d\n", hod);
pole[hod] = 1;
pocet++;
}
cyklu++;
} while (pocet != POCET_HODU);
printf("\nPocet cyklu pro vygenerovani %d unikatnich hodu: %d\n", POCET_HODU, cyklu);
return 0;
}
Ondrej Zadrapa:21.5.2020 16:53
A taková hloupá otázka, lze to, se změněným rozpětím aplikovat i třeba na sportku, nebo ten program že včerejška?
Ondrej Zadrapa:22.5.2020 16:22
Sub Main()
Dim random As New Random
Dim soucet As Integer = 0
Dim pocet As Integer = 0
Console.WriteLine("Zadejte pocet cisel:")
Dim pocetCisel As Integer = Console.ReadLine()
Dim poleCisel() As Integer = New Integer(pocetCisel - 1) {}
For i As Integer = 0 To pocetCisel - 1
Console.Write("Zadej cislo: ")
poleCisel(i) = Integer.Parse(Console.ReadLine())
pocet += 1
soucet += poleCisel(i)
Next
Dim minimum As Integer = poleCisel(0)
For i As Integer = 0 To poleCisel.Length - 1
If poleCisel(i) < minimum Then
minimum = poleCisel(i)
End If
Next
Dim maximum As Integer = poleCisel(0)
For i As Integer = 0 To poleCisel.Length - 1
If poleCisel(i) > maximum Then
maximum = poleCisel(i)
End If
Next
Dim druhaMocnina As Integer = poleCisel(0)
For i As Integer = 0 To poleCisel.Length - 1
druhaMocnina = poleCisel(i) * poleCisel(i)
Next
Console.WriteLine("Pocet: {0}", pocet)
Console.WriteLine("Soucet: {0}", soucet)
Console.WriteLine("Maximum: {0}", maximum)
Console.WriteLine("Minimum: {0}", minimum)
Console.WriteLine("Prumer: {0}", soucet / pocet)
For Each vypis In poleCisel
Console.WriteLine(vypis * vypis & " ")
Next
Console.WriteLine("Mam zobrazit soucet druhych mocnin? (ano = a + enter / ne = enter)")
Dim pokracovat As String = Console.ReadLine().ToLower().Trim()
If pokracovat = "a" Then
Console.WriteLine("Soucet druhych mocnin: {0}")
Console.WriteLine("Stiskni libovolnou klavesu k ukonceni aplikace.")
Else
Console.WriteLine("Stiskni libovolnou klavesu k ukonceni aplikace.")
End If
Console.ReadKey()
End Sub
Muzu se Te zeptat, jakym zpusobem se daji prevest zadana cisla v poli do druhých mocnin, ty mocniny sečíst a výsledek vypsat v konzoli, nejak na to nemuzu prijit, nejde třeba nejak ten vypis, co mam v kodu, nejak sečíst, asi ne, ze?
DarkCoder:22.5.2020 16:38
Jednoduše. Vytáhneš hodnotu z pole, přepíšeš ji na její druhou mocninu a aktualizuješ součet.
// Soucet mocnic cisel 0 až 9
#include <stdio.h>
#define SIZE 10
int main(void) {
int soucet = 0, pole[SIZE];
for (int i = 0; i < SIZE; i++) pole[i] = i;
for (int i = 0; i < SIZE; i++) {
pole[i] *= pole[i];
soucet += pole[i];
}
printf("\nSoucet mocnic cisel 0-9: %d\n", soucet);
return 0;
}
Ondrej Zadrapa:22.5.2020 20:32
Sub Main()
Dim nahodnyShluk As String
Dim random As New Random
Dim pocet As Integer
Dim polePismen(100) As String
Dim pocty(4) As Integer
Do
For i As Integer = 0 To polePismen(100)
Console.Write("Zadej pismeno: ")
Dim pismeno As String = Convert.ToString(Console.ReadLine())
polePismen(pismeno.ToString) = pismeno.ToString
pocet += 1
Next
Loop Until pocet = 5
For i As Integer = 0 To pocty(4)
nahodnyShluk = random.Next(polePismen.Length)
If polePismen(i) = nahodnyShluk Then
Console.WriteLine(nahodnyShluk)
End If
Next
Console.ReadKey()
Prosim Te, muzu Te poprosit o další radu? Ted mi vlastne doslo, ze jsem poradne, nebo spis vůbec nepracoval se zadavanim pismen, které bych chtěl pouzit v generatoru nahodnych shluku slov a nedari se mi program presvedcit, ze to, co chci zadat ma byt String, pokazde mi to vyplivne, ze prevod retezce, třeba pismeno s není při prevodu na Integer platny. Co tam delam spatne? Predem diky.
DarkCoder:22.5.2020 21:07
Neznám VB, na to se musíš podívat do nějaké příručky nebo si projít nějaké tutoriály. Každopádně je rozdíl zda chceš pracovat se znaky nebo z řetězci. VB má odlišný datový typ pro znak (Char) a pro řetězec (String). Měl bys postupovat systematicky a naučit se nejprve pracovat se znaky a až poté z řetězci. Naučit se, jak definovat znakovou proměnnou, jak ji inicializovat, jak ji přiřadit hodnotu, jak si vypsat, apod.
Ukázka odlišnosti datových typů
Dim myString As String = "ABCDE"
Dim myChar As Char
// znak 'D' se ulozi do myChar
myChar = myString.Chars(3)
Dále je třeba znát kde se jaký typ očekává a podle toho použít správný tvar výrazu.
Už třeba následující část kódu mi přijde podezřelá
For i As Integer = 0 To polePismen(100)
Ondrej Zadrapa:23.5.2020 21:17
Sub Main()
Dim random As New Random
Dim znaky() As String = {}
Console.WriteLine("Zadejte delku slova:")
Dim delkaSlova As Integer = Console.ReadLine()
For i As Integer = 0 To delkaSlova - 1
Dim nahodneSlovo = random.Next(znaky.Length - 1)
Dim slovo As String = znaky(nahodneSlovo)
Console.WriteLine(slovo)
Next
Console.ReadKey()
Cau, koukl by ses mi prosim Te na to, jestli by jsi mi s tim dokazal pomoci, ja uz jsem vazne v koncích...
DarkCoder:23.5.2020 22:39
Těžko se radí pokud nenapíšeš co má program dělat. Pokud se má generovat náhodné slovo zadané délky, tak si nejprve deklaruj pole nějaké délky. Zadej hodnotu, ověř, zda pole bude pro slovo dostatečně velké. Pro každý index pole generuj číslo v rozsahu ASCII znaků, které mohou být součástí slova. Znak odpovídající dané ASCII hodnotě ulož do pole. Vypis pole.
Ondrej Zadrapa:23.5.2020 23:04
Jo, promiň, zapomněl jsem dodat, že mám z písmen vygenerovat náhodný shluk, prostě aby si to z těch písmenek složilo slovo o třeba 5 znacích. Jenže mě napadlo, že tam někam patří to Asc nebo Chr, ale kam, to nevím. Pak to pole znaky má zůstat prázdné, nebo do něj mám vepsat všechny písmena abecedy jako třeba "znaky() as String = {"abcdefghijklmnop..."}, nebo to nechat prázdné a do "random.Next()" dát místo znaky.Lenght něco jako Asc(65-100), já v tom mám docela slušný zmatek.
DarkCoder:23.5.2020 23:20
Jenže mě napadlo, že tam někam patří to Asc nebo Chr, ale kam, to nevím.
Pro každý index pole generuj číslo v rozsahu ASCII znaků, které mohou být součástí slova. Znak odpovídající dané ASCII hodnotě ulož do pole.
Buď si pole znaky naplň znaky, které mohou být součástí vygenerovaného slova nebo ho vůbec nezadávej. Pokud použiješ pole znaky tak prováděj náhodné číslo v rozsahu jeho délka - 1. Pokud ho nezadáš tak v cyklu si vygeneruj číslo v rozsahu 65 až 122 bez hodnot 91 až 96. Zde použiješ funkcí na převod z čísla na znak abys tento znak následně uložil do pole.
Ondrej Zadrapa:24.5.2020 10:41
Sub Main()
Dim rnd As New Random
Dim pole(10) As String
For i As Integer = 0 To pole.Length - 1
pole(i) = ChrW(rnd.Next(65, 90))
Console.Write(pole(i))
Next
Console.ReadKey()
Tak jo, nakonec reseni prinesl Microsoft.
Ondrej Zadrapa:24.5.2020 15:08
Sub Main()
Dim slovo As String
Console.Write("Zadejte pocet slov: ")
Dim pocetSlov As Integer = Console.ReadLine()
Dim poleSlov As String() = New String(pocetSlov) {}
For i As Integer = 0 To pocetSlov - 1
Console.Write("Zadejte {0}. slovo: ", i + 1)
poleSlov(i) = Console.ReadLine()
Next
Console.Write("Zadejte slovo: ")
slovo = Console.ReadLine()
Dim poradi As Integer = 0
For i As Integer = 0 To poleSlov.Length - 1
If poleSlov(i) = slovo Then
poradi = i
End If
Next
For Each suda In poleSlov
If suda Mod 2 = 0 Then
Console.WriteLine("{0}", suda & " ")
End If
Next
Console.WriteLine("Zadane slovo bylo {0}. v poradi.", poradi + 1)
Array.Reverse(poleSlov)
For Each poradiSlov In poleSlov
Console.WriteLine(poradiSlov & " ")
Next
Console.ReadKey()
End Sub
Mohl bys mi prosim Te poradit se zapisem hodnot na sudem indexu, potažmo lichem, s písemnými hodnotami se to asi dela jinak nez s ciselnymi, porad mi to vystupu pise, ze hodnota suda = Nothing, cili je tam asi navíc, nebo zbytecne, ale nevim, co místo ni, bud mi pak blbne prevod, no pokazde něco, ja sam tem chybam ani nerozumim, vidim v nich akorát to, ze micham hrusky s jablky, ale když se podivam na sit, tak všichni prevadeji cisla v poli na sude indexy, na liche všichni serou a o písemných hodnotách nic ani na strankach Microsoftu.
DarkCoder:24.5.2020 15:40
Sudost popřípadě lichost je dána výsledkem operace modulo. Zde výsledkem operace modulo nad daným indexem. To je jeden způsob. Druhů způsob je procházení pouze sudých indexů a nad nimi následné provádět operaci.
Zde je příklad kde je deklarováno pole celých čísel o velikosti 10. Toto pole je naplněno hodnotami odpovídající danému indexu, tedy hodnotami 0-9. Následně jsou ukázány oba způsoby, jak vypsat hodnoty pouze na sudých indexech.
#include <stdio.h>
#define SIZE 10
int main(void) {
int pole[SIZE];
for (int i = 0; i < SIZE; i++) pole[i] = i;
// 1. zpusob
for (int i = 0; i < SIZE; i++) {
if(!(i % 2)) printf("%d ", pole[i]);
}
putchar('\n');
// 2. zpusob
for (int i = 0; i < SIZE; i+=2) {
printf("%d ", pole[i]);
}
return 0;
}
Ondrej Zadrapa:24.5.2020 15:46
Právě s celými čísly si umím poradit, tam i Mod 2 = 0 stačí k výpisu čísel na sudých indexech. Ale když máš v poli slovo, tak ten výpis prostě nefunguje, nebo to dělám špatně
DarkCoder:24.5.2020 16:19
Výpis Ti nefunguje proto, protože v následujícím úryvku kódu vůbec nepracuješ s hodnotou na daném indexu.
For Each suda In poleSlov
If suda Mod 2 = 0 Then
Console.WriteLine("{0}", suda & " ")
End If
Next
Spíše by tam mělo být něco jako toto:
Console.WriteLine("{0} ", poleSlov(suda))
Zobrazeno 38 zpráv z 38.