IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.
Avatar
Martin Ostárek:13.1.2023 15:00

Zdravím,
nejprve bych ctěl zmínit, že jsem úplný amatér a s programováním začínám. Mám za úkol ve visual basicu pod excelem, aby program přes input boxy načet jména žáků a výšku žáků a následně s prázdným polem/inutboxem se načítání ukončuje. Následně má vypsat nejvyššího žáka (jméno i výšku)
Program mi dokáže načíst jména a výšku. Výšku přes algoritmizaci dokážu vypsat, tedy nejvyššího hodnotu, ale nevímm, jak udělat, aby mi to vypsalo jak jméno, tak i výšku v jednou řádku. Nevím, jak spojit jméno žáka a jeho výšku?
snad jsem to popsal nějak srozumitelně.

děkuji za případnou odpověď

Zkusil jsem: Sub main4()
Dim jmenoZaka As String
Dim vyskaZaka As String
Dim sum As String
Dim s As String
Dim i As String
Dim max As String
Dim min As String

s = ""
jmenoZaka = ""
sum = ""
i = 0

Do
jmenoZaka = InputBox("Zadejte jméno žáka: (prázdné pole=konec) ")
vyskaZaka = InputBox("Zadejte výšku žáka (cm): (prázdné pole=konec)")
sum = sum + jmenoZaka + vyskaZaka

If i = 0 Then ' algoritmizace
max = vyskaZaka
Else
If vyskaZaka > max Then
max = vyskaZaka
End If
End If
i = i + 1

Loop While jmenoZaka > "" And vyskaZaka > ""

MsgBox max

End Sub

 
Odpovědět
13.1.2023 15:00
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:13.1.2023 15:49

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

 
Nahoru Odpovědět
13.1.2023 15:49
Avatar
DarkCoder
Člen
Avatar
Odpovídá na Martin Ostárek
DarkCoder:13.1.2023 16:30

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).

Nahoru Odpovědět
13.1.2023 16:30
"I ta nejlepší poučka postrádá na významu, není-li patřičně předána." - DarkCoder
Avatar
DarkCoder
Člen
Avatar
Odpovídá na Martin Ostárek
DarkCoder:13.1.2023 17:01

Č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.

Nahoru Odpovědět
13.1.2023 17:01
"I ta nejlepší poučka postrádá na významu, není-li patřičně předána." - DarkCoder
Avatar
Odpovídá na DarkCoder
Martin Ostárek:13.1.2023 19:42

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ů?

 
Nahoru Odpovědět
13.1.2023 19:42
Avatar
DarkCoder
Člen
Avatar
Odpovídá na Martin Ostárek
DarkCoder:13.1.2023 19:53

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.

Nahoru Odpovědět
13.1.2023 19:53
"I ta nejlepší poučka postrádá na významu, není-li patřičně předána." - DarkCoder
Avatar
Martin Ostárek:13.1.2023 21:30

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

 
Nahoru Odpovědět
13.1.2023 21:30
Avatar
DarkCoder
Člen
Avatar
Odpovídá na Martin Ostárek
DarkCoder:14.1.2023 13:34

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
Akceptované řešení
+20 Zkušeností
+2,50 Kč
Řešení problému
Nahoru Odpovědět
14.1.2023 13:34
"I ta nejlepší poučka postrádá na významu, není-li patřičně předána." - DarkCoder
Avatar
Odpovídá na DarkCoder
Martin Ostárek:15.1.2023 22:43

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

 
Nahoru Odpovědět
15.1.2023 22:43
Avatar
DarkCoder
Člen
Avatar
Odpovídá na Martin Ostárek
DarkCoder:16.1.2023 14:11

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.

Nahoru Odpovědět
16.1.2023 14:11
"I ta nejlepší poučka postrádá na významu, není-li patřičně předána." - DarkCoder
Avatar
Martin Ostárek:16.1.2023 23:55

ano pomohlo, díky

 
Nahoru Odpovědět
16.1.2023 23:55
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 11 zpráv z 11.