Diskuze: Program pro vypis maximalni, minimalni, prumer, atd. cifry
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.

Člen

Zobrazeno 12 zpráv z 12.
//= 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.
Musíš si stanovit proměnnou, která determinuje, že bylo načteno alespoň jedno platné číslo. Na základě této proměnné stanovíš minimum ikdyz číslo je větší a maximum ikdyz číslo menší! Je třeba pracovat s platnými čísly nikoli s čísly zadané při inicializaci. Úloha je koncipována tak že na vstupu nevíš kolik bude čísel, ale víš co ukončuje jejich zadávání. Takže buď zvolíš nekonečnou variantu for nebo jiný cyklus.
Trochu se s tím poper, to že hned budeš poptávat řadu tím neprohloubíš své myšlení.
Ta podmínka
ElseIf cislo = 0 Then
pocet -= 1
soucet -= cislo
je taková nepěkná. Pokud místo toho použiješ
Continue For
, tak ti to více méně přeskočí všechen ten kód pod tím, tudíž přičítání počtu a součtu, a cyklus pojede další iteraci. S tímto bych si dal pozor na pořadí podmínek, tato by měla být jako první. No a k tomu, proč ti nejde minimum. Hned na začátku jsi si nastavil minimum na 0, tudíž menší jsou jenom záporná čísla. Také si dej pozor, pokud se provede if, elseif už se neprovádí.
Sub Main()
Dim max As Integer
Dim min As Integer
Dim pocet As Integer = 0
Dim soucet As Integer = 0
Dim pokracovat As String = "a"
While pokracovat = "a"
Console.WriteLine("Zadej cislo:")
Dim zadane As Integer = Console.ReadLine()
For i As Integer = zadane To zadane
If zadane > max Then
max = zadane
ElseIf zadane < min Then
zadane = min
End If
Continue For
Next
pocet += 1
soucet += zadane
Console.WriteLine("Pokracovat? (ano = a + enter / ne = enter)")
pokracovat = Console.ReadLine().ToLower().Trim()
End While
Console.WriteLine("Nejvyssi cifra: {0}", max)
Console.WriteLine("Nejnizsi cifra: {0}", min)
Console.WriteLine("Prumer: {0}", (soucet / pocet))
Console.WriteLine("Celkovy soucet: {0}", soucet)
Console.WriteLine("Celkovy pocet: {0}", pocet)
Console.ReadKey()
End Sub
Tak, pravdepodobne nedostanu radu, protože jsem urcite nevyzkousel všechno, nebo jsem bliz, nez si myslim, tudíž i když vazne nevim, co dal, tak se chci jenom zeptat, i když to porad nedela, co potrebuji, jsem aspoň bliz, nebo jsem si to zkomplikoval a mel bych se vrátit na puvodni hodnoty?
Abys mohl určit hodnotu min a max a porovnávat nadcházející hodnoty, musíš do nich vložit nějakou hodnotu. Takto jak to máš nemáš hodnoty definované, tudíž porovnání Ti nebude dávat žádnou srozumitelnou hodnotu. Pracuj s proměnnou počet abys zjistil zda vůbec nějaká platná hodnota na vstupu bude. Stejně tak při vyhodnocování pracuješ s hodnotou počet. Díky ní vypisuješ hodnoty nebo informuješ o tom že nebylo zadáno žádné číslo, tudíž hodnoty min, max, soucet, prumer nelze urcit.
Když budeš vysloveně tápat, můžeš se inspirovat (kód psaný v C).
#include <stdio.h>
#include <stdlib.h>
int main(void) {
int num, min, max, pocet = 0, soucet = 0;
printf("Zadej cislo: ");
scanf("%d", &num);
if (!num) {
printf("Nebylo zadano platne cislo.\n");
printf("MIN, MAX, SOUCET, PRUMER nelze urcit.\n");
exit(0);
}
else {
min = num;
max = num;
pocet++;
soucet += num;
}
do {
printf("Zadej cislo: ");
scanf("%d", &num);
if (num) {
if (num < min) min = num;
if (num > max) max = num;
pocet++;
soucet += num;
}
} while (num);
putchar('\n');
printf("MIN = %d\n", min);
printf("MAX = %d\n", max);
printf("POCET = %d\n", pocet);
printf("SOUCET = %d\n", soucet);
printf("PRUMER = %f\n",(float)soucet / pocet);
return 0;
}
nebo
#include <stdio.h>
#include <stdlib.h>
int main(void) {
int num, min, max, pocet = 0, soucet = 0;
do {
printf("Zadej cislo: ");
scanf("%d", &num);
if (num) {
if (!pocet) {
min = num;
max = num;
}
else {
if (num < min) min = num;
if (num > max) max = num;
}
pocet++;
soucet += num;
}
} while (num);
putchar('\n');
if (!pocet) {
printf("Nebylo zadano platne cislo.\n");
printf("MIN, MAX, SOUCET, PRUMER nelze urcit.\n");
exit(0);
}
else {
printf("MIN = %d\n", min);
printf("MAX = %d\n", max);
printf("POCET = %d\n", pocet);
printf("SOUCET = %d\n", soucet);
printf("PRUMER = %f\n", (float)soucet / pocet);
}
return 0;
}
No, nekdy je potřeba brat informace doslovne. A taky si precist clanek o nekonecnych hodnotách v cyklu. Pocatecni minimum musí byt vetsi nez to budouci, ta 0 tam není jen tak na okrasu, opet jsem byl vyveden z iluze. Dekuji, chtelo to predelat, vyhazet for, nahradit while a svete div se, jede to. Tady je výsledek.
Sub Main()
Dim maximum As Integer = -2147483648
Dim minimum As Integer = 2147483647
Dim pocet As Integer = 0
Dim soucet As Integer = 0
Dim pokracovat As String = "a"
While pokracovat = "a"
Console.WriteLine("Zadej cislo:")
Dim zadane As Integer = Console.ReadLine()
If zadane <> 0 Then
pocet += 1
soucet += zadane
If zadane > maximum Then
maximum = zadane
End If
If zadane < minimum Then
minimum = zadane
End If
End If
Console.WriteLine("Pokracovat? (ano = a + enter / ne = enter)")
pokracovat = Console.ReadLine().ToLower().Trim()
End While
Console.WriteLine("Nejvyssi cifra: {0}", maximum)
Console.WriteLine("Nejnizsi cifra: {0}", minimum)
Console.WriteLine("Prumer: {0}", (soucet / pocet))
Console.WriteLine("Celkovy soucet: {0}", soucet)
Console.WriteLine("Celkovy pocet: {0}", pocet)
Console.ReadKey()
End Sub
V pohode, uz jsem si poradil, i tak, diky za radu, chtelo to proste vice
hledat a hlavne to opravdu brat jako hodnoty, které si nastavim. Doslova, coz
mi v hlave proste odporuje, ale aspoň se nenudim. Ale touha to odnekud opsat mi
otevrela cestu k clanku o hledani minima, kdy na pocatku musí clovek zadat
+nekonecno. Coz tady uz bylo receno drive, ale jak rikam, aby to doslo, to nekdy
proste trva.
o hledani minima, kdy na pocatku musí clovek zadat +nekonecno
No to právě že ne. To lze tehdy, pracuje-li se i s hodnotou pocet, viz. mé příklady výše. Pokud někde uvádějí, že se má zadat pro minimum maximalní hodnota platná v rozsahu typu a pro maximum minimální hodnota platná v rozsahu typu, tak je to špatně! Nemůže to fungovat pokud na vstupu zadáš hodnotu 0. Ověř si to na svém příkladu, že tomu tak je.
Nebude to fungovat, protože mam v podmínce, ze pokud zadam nulu, tak ji bude vesele ignorovat, takze nula i kdyby byla 5x zadana, tak stejne při vypisu nebude 0 reprezentovat minimum, ale zkratka bude 0 všude, proste jako bych nic nezadal, 0 v tomhle pripade nepatri do dat.
Pokud zadáš pouze 0, tak se Ti vypíši nesmyslné hodnoty pro minimum a maximum. Vypíší se Ti hodnoty minima a maxima zadané při inicializaci proměnných což je špatně. Tyto hodnoty nejsou součástí vstupních dat. Proto se nahodilá inicializace nepoužívá popř. se musí aktualizovat hodnoty při prvním platném vstupu.
Zobrazeno 12 zpráv z 12.