Nevíte-li si rady s jakýmkoliv matematickým problémem, toto místo je pro vás jako dělané.
Nástěnka
❗22. 8. 2021 (L) Přecházíme zpět na doménu forum.matweb.cz!
❗04.11.2016 (Jel.) Čtete, prosím, před vložení dotazu, děkuji!
❗23.10.2013 (Jel.) Zkuste před zadáním dotazu použít některý z online-nástrojů, konzultovat použití můžete v sekci CAS.
Nejste přihlášen(a). Přihlásit
Stránky: 1
dobry den
potreboval bzch poradit s ulhou vzpsani druhe nejvetsi hodnoty tedy z mnoziny napr 7,7,5,6,0 aby mi to vypsalo 6
zadani: V seznamu celých čísel ukončeném -1, které nepatří do seznamu, nalezněte druhou největší hodnotu. Seznam má vždy alespoň dvě hodnoty a čísla se mohou opakovat.
moje reseni:
program druhahodnota;
var max1,max2,c:integer;
begin
max2:=-MAXINT;
read(max1);
read(c);
if c>max1 then
begin
max2:=max1;
max1:=c;
end
else
if (c>max2) and (c<max1) then max2:=c;
read(c);
while (c<>-1) do
begin
if c>max1 then
begin
max2:=max1;
max1:=c;
end
else if c<>max2 then max2:=c;
read(c);
end;
writeln(max2);
end.
dekuji za pripominky
Offline
↑ myrek:
Čtení prvního znaku není třeba ošetřovat zvlášť. Ošetření konce vstupu se dá udělat jednou podmínkou a příkazem break.
while true do begin { "nekonecna smycka" }
read(c);
if c = -1 then break; { osetreni konce vstupu }
{ ... }
endOffline
takze takhle jste to myslel:
program druhahodnota;
var max1,max2,c:integer;
begin
max2:=-MAXINT;
read(max1);
read(c);
if c>max1 then
begin
max2:=max1;
max1:=c;
end
else
if (c>max2) and (c<max1) then max2:=c;
while true do begin
read c;
if c = -1 then break;
begin
if c>max1 then
begin
max2:=max1;
max1:=c;
end
else if c<>max2 then max2:=c;
end;
end;
writeln(max2);
end.
Offline
Ahoj, tento problém se zde před několika dny řešil, viz: http://forum.matweb.cz/viewtopic.php?id=21723
Podívej se na to, myslím, že v tvém programu na řádku: if (c>max2) and (c<max1) then max2:=c; je podmínka c > max2 zbytečná, protože max2 je rovno -MAXINT. Každopádně na řádku else if c<>max2 then max2:=c; je chyba určitě, patří tam else if c <> max1 AND c > max2 then max2 := c; V tvém řešení pokud max1=20, max = 10 a je zadáno číslo c=5, pak c>max1 je false a c<>max2 je true, tudíž max2:=c, čímž se tam místo desítky dostane pětka!!! a program je nefunkční.
Offline
↑ vojta01:
urcite to zkusim
co se tyce odkazu tak je na program ktery z mnoziny napr 11, 12, 8, 12, -1
vypise 12
a ja potrebuju program aby to vypsalo 11
Offline
Ahoj, program funguje korektně, hodnotu 11 zajistí řádek: else if c <> max1 AND c > max2 then max2 := c; (z předchozí podmínky vím, že c <= max1, touto podmínkou projdou pouze čísla c pro která platí: max1 > c > max2 ==> tedy doposud druhé největší různé číslo, což potřebuješ).
Offline
Stránky: 1