Diskuze: Problém s dokončením úkolu
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.

Člen

Zobrazeno 11 zpráv z 11.
//= 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.
google = visual basic save data to array
https://learn.microsoft.com/…ures/arrays/
google = visual basic save data to two dimensional array
https://stackoverflow.com/…sional-array
Sub Main()
Dim a = New Characters()
a.characters(0, 0) = "Stack"
a.characters(0, 1) = "Overflow"
a.characters(1, 0) = "Is"
a.characters(1, 1) = "awesome!"
a.Save("E:\characters.sav")
Dim b = Characters.Load("E:\characters.sav")
Console.WriteLine(b.characters(0, 0))
'-> Stack
Console.ReadLine()
End Sub
https://www.tutorialspoint.com/…t_arrays.htm
Take zpusob, pouzit dve pole.
Dim intData() As Integer = {12, 16, 20, 24, 28, 32}
Dim names() As String = {"Karthik", "Sandhya", _
"Shivangi", "Ashwitha", "Somnath"}
---
Module arrayApl
Sub Main()
' an array with 5 rows and 2 columns
Dim a(,) As Integer = {{0, 0}, {1, 2}, {2, 4}, {3, 6}, {4, 8}}
Dim i, j As Integer
' output each array element's value '
For i = 0 To 4
For j = 0 To 1
Console.WriteLine("a[{0},{1}] = {2}", i, j, a(i, j))
Next j
Next i
Console.ReadKey()
End Sub
End Module
---
Module arrayApl
Sub Main()
'a jagged array of 5 array of integers
Dim a As Integer()() = New Integer(4)() {}
a(0) = New Integer() {0, 0}
a(1) = New Integer() {1, 2}
a(2) = New Integer() {2, 4}
a(3) = New Integer() {3, 6}
a(4) = New Integer() {4, 8}
Dim i, j As Integer
' output each array element's value
For i = 0 To 4
For j = 0 To 1
Console.WriteLine("a[{0},{1}] = {2}", i, j, a(i)(j))
Next j
Next i
Console.ReadKey()
End Sub
End Module
https://www.dotnetperls.com/2d-vbnet
' Declare two-dimensional array of strings.
Dim values(,) As String =
New String(,) {{"AA", "BB"},
{"CC", "DD"}}
https://software-solutions-online.com/…l-array-vba/
Sub array_2d_snacks()
'declaring and defining size of an array
'4 means 5 rows starting from 0 to 4 and 1 means 2 columns starting from 0 to 1
Dim arr_sna(4, 1) As Variant
'initialize array elements
arr_sna(0, 0) = "Burger"
arr_sna(0, 1) = 5
arr_sna(1, 0) = "Noodles"
arr_sna(1, 1) = 7
arr_sna(2, 0) = "Sandwich"
arr_sna(2, 1) = 9
arr_sna(3, 0) = "Pasta"
arr_sna(3, 1) = 6
arr_sna(4, 0) = "Pizza"
arr_sna(4, 1) = 10
---
'declaring and defining the size of an array
Dim arr_sna(4, 1) As Variant
'initialize array elements
arr_sna(0, 0) = "Burger"
arr_sna(0, 1) = 5
arr_sna(1, 0) = "Noodles"
arr_sna(1, 1) = 7
arr_sna(2, 0) = "Sandwich"
arr_sna(2, 1) = 9
arr_sna(3, 0) = "Pasta"
arr_sna(3, 1) = 6
arr_sna(4, 0) = "Pizza"
arr_sna(4, 1) = 10
----
' step 1 : declare the array
Dim arr_furni() As Variant
' step 2 : set the size and dimensions using redim keyword
ReDim arr_furni(4, 2) As Variant
' step 3 : initialize the values
arr_furni(0, 0) = "table"
arr_furni(0, 1) = "$5"
arr_furni(0, 2) = "4 kg"
arr_furni(1, 0) = "chair"
arr_furni(1, 1) = "$6"
arr_furni(1, 2) = "3 kg"
arr_furni(2, 0) = "sofa set"
arr_furni(2, 1) = "$170"
arr_furni(2, 2) = "15 kg"
arr_furni(3, 0) = "double cot"
arr_furni(3, 1) = "$58"
arr_furni(3, 2) = "34 kg"
arr_furni(4, 0) = "Easy chair"
arr_furni(4, 1) = "$9"
arr_furni(4, 2) = "4 kg"
Jestli to spravne chapu, tak asi budes muset pokazde pomoci redim menit velikost array
Pracuješ pod Excelem, využij tedy prostředí Excelu. Jméno a výška žáka pro tebe představuje záznam. Načti data, jména ukládej do prvního sloupce, výšky do druhého sloupce. Vždy s načtení záznamem si aktualizuj počet načtených žáků. Najdi nejvyšší hodnotu výšky (druhý sloupec) že všech záznamů. Kolik jich bude, víš. Jelikož budeš procházet pomocí cyklu, budeš si uchovávat hodnotu iterační proměnné. Ta představuje i-tý záznam na kterém je Jméno žáka a jeho výška. Pak už ti stačí vypsat hodnotu ležící na i-tem řádku v prvním sloupci (jméno žáka) a hodnotu záznamu v i-tem řádku v druhém sloupci (výška žáka).
Či ještě lépe, nacti jméno a výšku a někam si to ulož. Pak vždy když nactes další jméno a výšku, tak porovnej výšku s uloženou hodnotou. Pokud he vyšší, aktualizuj uloženy záznam. Po posledním porovnání máš v uložených hodnotách jméno a výšku žáka s nejvyšší výškou.
Díky za odpověď.
jmé a výšku ukládám do sloupců viz (sum = sum + jmenoZaka + vyskaZaka),
ale není mi jasné toto "Vždy s načtení záznamem si aktualizuj počet
načtených žáků."
jak mám aktualizovat počet žáků?
Před prvním načtení budeš mít vytvořenou proměnnou count, kterou inicializuješ na 0. Poté co nacteš data, které buď úložiš do buněk nebo do nějakých proměnných, tak inkrementuješ count. Tím započítaš žáka k původnímu počtu.
Jde to I bez countu tak, že při zjišťování nejvyšší výšky otestuješ na to, zda buňka je prázdná. To je příznak pro tebe že už další data nejsou a můžeš ukončit cyklus.
Nějak jsem došel k závěru, i když sám ani nevím jak... Program
funguje, jen mi to ve výsledku ukazuje nejprve výšku a až poté jméno.
Mohu poprosit o kontrolu? Jestli mám něco špatně?
Sub main4()
Dim jmenoZaka As String
Dim vyskaZaka As String
Dim i As String
Dim max As String
Dim ret As String
jmenoZaka = ""
vyskaZaka = 0
i = 0
ret = ret + "jméno žáka výška žáka"
max = 0
Do
jmenoZaka = InputBox("Zadejte jméno žáka: (prázdné pole=konec) ")
vyskaZaka = InputBox("Zadejte výšku žáka (cm): (prázdné pole=konec)")
ret = ret + Chr(10) + jmenoZaka + " " + vyskaZaka
i = i + 1
If i = 0 Then ' algoritmizace
max = vyskaZaka
Else
If vyskaZaka > max Then
max = vyskaZaka
End If
End If
i = i + 1
max = max + " " + jmenoZaka
Loop While jmenoZaka > "" And vyskaZaka > ""
MsgBox ret
MsgBox max
End Sub
Máš tam několik chyb:
Používáš nevhodné datové typy (String pro výšku)
Deklaruješ proměnnou i kterou nikde nepoužíváš, i dvojí inkrementace
uvnitř není správně
Pro vyjádření nerovnosti používáš nesprávný operátor (> místo
<>)
Zkus toto:
Sub Main4()
Dim jmenoZaka As String
Dim vyskaZaka As Integer
Dim maxJmeno As String
Dim maxVyska As Integer
Dim ret As String
jmenoZaka = ""
vyskaZaka = 0
maxJmeno = ""
maxVyska = 0
ret = "jméno žáka výška žáka"
Do
jmenoZaka = InputBox("Zadejte jméno žáka: (prázdné pole=konec) ")
If jmenoZaka = "" Then Exit Do
vyskaZaka = InputBox("Zadejte výšku žáka (cm): (prázdné pole=konec)")
If vyskaZaka = "" Then Exit Do
ret = ret & vbNewLine & jmenoZaka & " " & vyskaZaka
If vyskaZaka > maxVyska Then
maxVyska = vyskaZaka
maxJmeno = jmenoZaka
End If
Loop
MsgBox ret
MsgBox "Nejvyšší žák: " & maxJmeno & ", výška: " & maxVyska & " cm"
End Sub
super, děkuji ti za odpověď. já ještě předtím, než si odpověděl,
tak jsem to udělal takto...
Ale tvé řešení je asi lepší. Jinak typ proměnné u vyskaZaka jako string
mám proto, protože mi to po zadání jména a výšky hodilo chybu "mišmaš"
když to bylo integer, proto jsem to změnil na string
každopádně děkuji za rady
Sub main5()
Dim jmenoZaka As String
Dim vyskaZaka As String
Dim i As String
Dim max As String
Dim sum As String
Dim x As String
jmenoZaka = ""
vyskaZaka = 0
i = 1
x = 0
max = 0
sum = ""
Do
jmenoZaka = InputBox("Zadejte jméno žáka: (prázdné pole=konec) ")
vyskaZaka = InputBox("Zadejte výšku žáka (cm): (prázdné pole=konec)")
sum = sum + Str(i) + " " + jmenoZaka + " " + vyskaZaka + Chr(10)
i = i + 1
If x = 0 Then ' algoritmizace
max = jmenoZaka + " " + vyskaZaka
Else
If jmenoZaka + " " + vyskaZaka > max Then
max = jmenoZaka + " " + vyskaZaka
End If
End If
x = x + 1
Loop While jmenoZaka > "" And vyskaZaka > ""
MsgBox sum
MsgBox max
End Sub
Pokud Ti to pomohlo, označ nejlepší odpověď jako řešení tvého dotazu. Přispěješ tak na pomoc druhým s dotazy umístěnými v placených článcích.
ano pomohlo, díky
Zobrazeno 11 zpráv z 11.