Diskuze: Aplikace pro mereni teploty vody
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.
Máš úlohu pro práci s polem. Podle toho jak zadáváš for cyklus tak dopředu víš kolik bude naměřených teplot. Je tedy zbytečné zjišťovat jejich počet. Kromě inicializovaného počtu máš proměnné soucet, minimum a pole pro 5 hodnot (teplot). Toto pole budeš naplňovat hodnotami běžně od nejnižšího indexu. Pořadí nebude proměnná ale znamená to výpis všech hodnot z pole od nejnižšího indexu po nejvyšší. Neplést si to se seřazením. Minimum inicializuj na hodnotu prvního prvku až poté, co načteš všechny teploty. Pak průchodem a porovnáním všech hodnot v poli zjistíš která hodnota je skutečně nejmenší.
No a jsem zase ztraceny, navíc tuhle ulohu mam jeste plnit bez pole. poslední na procviceni cyklu While, ale i tak jsem uplne vedle. S poli jsem delal maximalne tady v tutorialu, jinak jsem je vlastne ještě ani nemel sanci nikde moc pouzit, ted to ze zacatku vypada jak kvantova fyzika.
Pokud má být vstup oddělený od výstupu, tedy vypsat všechny teploty které byly zadané, aniž by mezi nimi byly byl příkaz vstupu, pak použití pole je bezpodmínečné. Pochybuji, že si máte vytvářet proměnnou pro každou teplotu. Jinak se znova podívej na mé dva způsoby práce s načítáním v cyklu a způsobu stanovení minima. Jediné co tam přibude je výpis aktuálně načtené teploty, jinak se to nijak zásadně neliší.
Sub Main()
Dim pokracovat As String = "a"
Console.WriteLine("Zadej pocet teplot:")
Dim pocetTeplot As Integer = Integer.Parse(Console.ReadLine())
Dim pole() As Integer = New Integer(pocetTeplot - 1) {}
While pokracovat = "a"
For i As Integer = 0 To pocetTeplot - 1
Console.Write("Zadej {0}. teplotu ohrevu: ", i + 1)
pole(i) = Integer.Parse(Console.ReadLine())
Next
Dim minimum As Integer = pole(0)
For i As Integer = 0 To pole.Length - 1
If minimum < pole(i) Then
pole(i) = minimum
End If
Next
Console.WriteLine("Pokracovat? a+enter/enter")
pokracovat = Console.ReadLine().ToLower().Trim()
End While
Console.ReadKey()
End Sub
Jak rikam, s poli jsem delal tak jednou, maximalne 2x, vic ani fň, jdu alespoň spravnym smerem?
While cyklus pro určení zda pokračovat je zde zbytečný. Další kroky jsou v pořádku (zjištění počet teplot, načtení teplot do pole, určení minima. Chybně měníš hodnotu na indexu. Máš měnit minimum nikoli hodnotu pole. Chybí Ti veškeré finální výpisy.
Jak z toho teda urcim prumer, vypisu všechny ty vypsane hodnoty a zjistim poradove číslo, kdy byla zadana nejnizsi hodnota?
Zadej počet teplot, načti všechny teploty do pole, sečti všechny hodnoty v poli a vyděl počtem teplot. Jak se počítá průměr už si dělal. Máš určit minimum, nikoli pořadové číslo.
Mam urcit nejmensi teplotu a poradi, kdy byla vypsana.
Pokud měníš hodnotu minima, pak si aktualizuješ vždy i index. Máš-li pole 5 prvků a zjistíš, že minimum je na druhém indexu pole[1], pak to značí že byla vypsaná jako druhá (index + 1).
Já Ti teď asi nerozumím, ale jak mám dopředu vědět, na kterém indexu bude ležet nejmenší hodnota, když vlastně Ty hodnoty zadávám až v konzoli?
Po zadání každé nové hodnoty otestuješ na to zda je hodnota menší než dosavadní minimum. Po načtení všech dat tak víš jaká hodnota je nejnižší a kolikátá v pořadí byla zadána. Řídící proměnná cyklu koresponduje s indexem pole.
Sub Main()
Console.WriteLine("Zadej pocet teplot:")
Dim pocetTeplot As Integer = Integer.Parse(Console.ReadLine())
Dim pole() As Integer = New Integer(pocetTeplot - 1) {}
For i As Integer = 0 To pocetTeplot - 1
Console.Write("Zadej {0}. teplotu ohrevu: ", i + 1)
pole(i) = Integer.Parse(Console.ReadLine())
Next
Dim minimum As Integer = pole(0)
For i As Integer = 0 To pole.Length - 1
If pole(i) < minimum Then
minimum = pole(i)
End If
Next
Dim prumer As Single = pole(pole.Length / (pocetTeplot))
For Each vypis In pole
Console.Write(vypis & " ")
Next
Console.WriteLine()
Console.WriteLine("Prumerna teplota je {0} stupnu.", prumer)
Console.WriteLine("Nejmensi zadana teplota {0} stupnu byla zadana jako {0}.", minimum)
Console.ReadKey()
End Sub
Ja jsem fakt asi pablb, nemam predstavu, kde mam co pridat/ubrat/upravit,
aby mi z toho vyslo poradi.
Muzes me trosku vic postrčit k tomu, co mi furt nedochazi?
Hodnota minima je dana nejnižší hodnotou prvku na daném indexu a pozice minima je dána indexem. Při změně minima je třeba aktualizovat i index. Viz. následující úryvek kódu:
// Nacteni teplot do pole
// ...
// Inicialize minima a pozice minima
if (pocetTeplot > 0) {
min = pole[0];
minpos = 0;
}
else {
printf("Nebyla zadana zadna teplota: %d\n", min);
exit(0);
}
// Stanoveni minima a pozice minima
for (int i = 0; i < pocetTeplot; i++) {
if (pole[i] < min) {
min = pole[i];
minpos = i;
}
}
// Vypis minima a pozice minima
printf("Hodnota nejmensi teploty: %d\n", min);
printf("Nejmensi teplota byla zadana jako: %d.\n", minpos + 1);
Ja bych strasne rad ocenil, ze se mi snazis pomoct, ale rozdily v syntaxi nesou pricinu toho, ze jsem se neposunul ani o krok dal, jsem porad na stejnem miste.
Teda spis jsou doprovazejicim problémem, vetsi pruser je absolutni neznalost prace s poli, ja vůbec nevim, co mam delat, abych to zmenil, ten Tvuj pokus o radu program v podstate uplne ignoruje, pokazde je vystup stejny: "Nejmensi zadana teplota 10 stupnu byla zadana jako 10."... při 3 hodnotách, 10,20,30, takze to vypise hodnotu
Sub Main()
Console.WriteLine("Zadej pocet teplot:")
Dim pocetTeplot As Integer = Integer.Parse(Console.ReadLine())
Dim pole() As Integer = New Integer(pocetTeplot - 1) {}
For i As Integer = 0 To pocetTeplot - 1
Console.Write("Zadej {0}. teplotu ohrevu: ", i + 1)
pole(i) = Integer.Parse(Console.ReadLine())
Next
Dim minimum As Integer = pole(0)
Dim poradi As Integer = 0
For i As Integer = 0 To pole.Length - 1
If pole(i) < minimum Then
minimum = pole(i)
End If
Next
Dim prumer As Single = pole(pole.Length / (pocetTeplot))
For Each vypis In pole
Console.Write(vypis & " ")
Next
Console.WriteLine()
Console.WriteLine("Prumerna teplota je {0} stupnu.", prumer)
Console.WriteLine("Nejmensi zadana teplota {0} stupnu byla zadana jako {0}.", minimum, poradi + 1)
Console.ReadKey()
End Sub
Vůbec neaplikuješ to co Ti celou dobu píšu. Nekoukej na syntax ale na to, abys pochopil to jak celý program funguje. Syntax je tak jednoduchá a podobná, že Ti to musí být jasné ikdyž se jedná o zápis v jiném programovacím jazyce. Navíc Ti vše doplňuji o popisy a komentáře.
Tak znova:
Řídící proměnná cyklu koresponduje s indexem pole. Pozice minima je dána indexem pole. Při změně minima je třeba aktualizovat i index.
for (int i = 0; i < pocetTeplot; i++) {
if (pole[i] < min) {
min = pole[i];
minpos = i;
}
}
Cyklus for provádí traversování části pole které je vyplněno údaji o teplotě. Traversování znamená že provádí úkon nad každým indexem pole. Proměnná počet teplot udává počet hodnot které si postupně uložil do pole. Pro každou hodnotu se provádí kontrola na minimum.
Pokud je hodnota menší než minimum, aktualizuje se minimum ale také se aktualizuje jeho pozice!
Proměnná minpos uchovává aktuální pozici s nejnižší teplotou. Všimni si, že do ní ukládám index pole. Po průchodu celým polem tak proměnná minpos uchovává pozici s nejnižší teplotou v celém poli.
To je celé...
Dobrý, pořadí se zázrakem spravilo, ale teď mi nefunguje průměr.
Zobrazeno 18 zpráv z 18.