Matematické Fórum

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

#1 03. 11. 2010 00:42 — Editoval myrek (03. 11. 2010 00:47)

myrek
Příspěvky: 223
Reputace:   
 

pascal druha nejvetsi hodnota

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

  • (téma jako vyřešené označil(a) myrek)

#2 03. 11. 2010 01:20

Oxyd
Příspěvky: 614
Škola: MFF UK, teoretická informatika
Pozice: Student
Reputace:   31 
 

Re: pascal druha nejvetsi hodnota

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

Code:

while true do begin      { "nekonecna smycka" }
  read(c);
  if c = -1 then break;  { osetreni konce vstupu }

  { ... }
end

Mýlím se častěji, než bych chtěl. Pokud vám v mém příspěvku něco nehraje, neváhejte se zeptat.
Jsem stále mlád a je mi příjemnější tykání. :)

Offline

 

#3 07. 11. 2010 11:44

myrek
Příspěvky: 223
Reputace:   
 

Re: pascal druha nejvetsi hodnota

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

 

#4 08. 11. 2010 18:47

vojta01
Příspěvky: 63
Reputace:   
 

Re: pascal druha nejvetsi hodnota

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

 

#5 08. 11. 2010 22:29

myrek
Příspěvky: 223
Reputace:   
 

Re: pascal druha nejvetsi hodnota

↑ 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

 

#6 09. 11. 2010 12:06

vojta01
Příspěvky: 63
Reputace:   
 

Re: pascal druha nejvetsi hodnota

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

 

#7 19. 11. 2010 23:56

myrek
Příspěvky: 223
Reputace:   
 

Re: pascal druha nejvetsi hodnota

Offline

 

Zápatí

Powered by PunBB
© Copyright 2002–2005 Rickard Andersson