Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailem Program v Pascalu na Proceduru

Nemohl by mi, prosím, někdo pomoci s tímto programem? =o(

SESTAVTE PROCEDURU PRO NALEZENI DVOU NEJVETSICH CISEL Z DANE MNOZINY N CISEL A POUZIJTE JI PRO RESENI TETO ULOHY: JE DANO N CISEL. NAJDETE DVE NEJVETSI Z NICH A ZE ZBYVAJICICH CISEL OPET DVE NEJVETSI.

Vím, jak najít dvě největší čísla, ale nedokážu to aplikovat v proceduře...

Děkuju za jakoukoliv pomoc... =o)

Jsou zobrazeny jen nové odpovědi. Zobrazit všechny
Předmět Autor Datum
Vytvořil jsem zatím tohle: program Project3; {PROGRAM 3 ******************************************…
Paulo 19.04.2010 16:40
Paulo
Na zaciatku do tych max1 a max2 si inicializuj prve a druhe cislo. Tak sa to robi spravne. Aby ti to… nový
MM.. 20.04.2010 00:03
MM..
OMG co mate vsetci s triedenim. On NEMA za ulohu triedit. Zlozitost najlepsieho triedenia je minimal… nový
MM.. 20.04.2010 00:00
MM..
Kdyz uz na komara s kulometem tak at je to rychlejsi chce to gattling :-D nový
virus 20.04.2010 06:38
virus
Dovolím si podotknout, že zadání patří zadavateli omlátit o hlavu. Není specifikováno o jaký čísla j… nový
Pavel 20.04.2010 07:08
Pavel
Posunuješ problém jinam, jenom stručně : obecné reálné číslo stroji nezadáš, nanejvýš computable num… nový
hynajs 20.04.2010 08:11
hynajs
Neposunuju problém jinam, s tím rozhodně nesouhlasím. Zadání musí být jednoznačný. Řešitel má proměn… nový
Pavel 20.04.2010 11:54
Pavel
Stačí tedy, když zůstaneme u racionálních čísel . A na tos přišel jakou úvahou? Pochopil bych ještě… nový
Pavel 20.04.2010 11:55
Pavel
Stroji mozes zadat aj obecne realne cislo, ak to tak naprogramoval programator. Kludne by som ti moh… nový
MM.. 20.04.2010 12:05
MM..
Z kontextu mi připadlo, že Pavel nemyslel reálné číslo dle IEEE-754, pokud ano, omlouvám se.:-) Ad… nový
hynajs 20.04.2010 12:34
hynajs
Nu, já myslel reálný číslo bez přívlastků. Ale je mi jasný, že při omezené velikosti reprezentace čí… nový
Pavel 20.04.2010 18:08
Pavel
Jů, mám tu chybu "reální" místo "reálný". Fuj. Pavel nový
Pavel 20.04.2010 11:52
Pavel
Existuje nějakej rozumnej důvod proč tu deklarujete pole přes TYPE? Nebo mi snad něco uniklo? nový
Nigfire 20.04.2010 19:00
Nigfire
Pokud se má to pole předávat jako parametr procedury, tak to z důvodu typové kompatibility jinak nej… nový
JoDiK 20.04.2010 21:43
JoDiK
Aha, zajímavá myšlenka. Mějme tedy čísla: 0, 2, 5, 5, 5, 5. A teď hádanka: Jsou dvě největší z nich… nový
Pavel 20.04.2010 21:48
Pavel
Samozřejmě že ano. Aby byl výsledek 2, 5, to by musel mezi těmi čísly být nějaký vztah (definovaný p… nový
touchwood 11.05.2010 22:36
touchwood
Samozrejme to neni. Moze byt spravne 5,5 a moze byt spravne aj 5,2. Co je spravne v praxi vyplyva z… poslední
MM.. 11.05.2010 22:39
MM..
Děkuju všem za rady... =o) Já jsem si to zadání bohužel nevymyslel a ani nejsem zkušený programátor… nový
Paulo 20.04.2010 22:50
Paulo
můžu se zeptat na tento program, vyřešil jste ho nějak? Já mám stejné zadání programu a nevím si s n… nový
alli 11.05.2010 20:40
alli
a co je na tom složitého? hledání 2,3 nebo klidně 4 nejmenších/největších čísel je tak pitomě jednod… nový
touchwood 11.05.2010 22:33
touchwood

Vytvořil jsem zatím tohle:

program Project3;

{PROGRAM 3 ************************************************** **********************
13. SESTAVTE PROCEDURU PRO NALEZENI DVOU NEJVETSICH CISEL Z DANE MNOZINY N CI-
SEL A POUZIJTE JI PRO RESENI TETO ULOHY: JE DANO N CISEL. NAJDETE DVE NEJVETSI
Z NICH A ZE ZBYVAJICICH CISEL OPET DVE NEJVETSI.
}

{$APPTYPE CONSOLE}

uses
SysUtils;

type
A=array[1..50] of integer;

var
M:A;
i,pocet:integer;
x:integer;

procedure maximum (var M:A; N:integer);
var i, max1, max2:integer;
begin
max1:=0;
max2:=0;
for i:=1 to N do
if M[i] > max2 then
begin
max2:=M[i]
end;
for i:=1 to N do
if (M[i] > max1) and (M[i] < max2) then
begin
max1:=M[i]
end;
writeln;
writeln('Maxima ze zadanych cisel jsou: ');
writeln (max1,' a ',max2);
end;

begin
writeln('Kolik cisel budete zadavat?: ');
readln(pocet);
i:=0;

writeln;
writeln('Zadejte prvky oddelene ENTREM: ');
for i:=1 to pocet do
begin
readln(x);
M[i]:=x;
end;
writeln;
write('Zadana mnozina je: ');
writeln;

for i:=1 to pocet do
write(M[i],' ');

maximum (M,pocet);
maximum (M,pocet);

writeln;
writeln('Program se ukonci stiskem klavesy ENTER');
readln;
end.

Nevím, jak zajistit nalezení dvou největších čísel z těch čísel zbývajících... =o( Poradí mi někdo prosím...???

Jinak děkuju za předešlé odpovědi... =o)

Na zaciatku do tych max1 a max2 si inicializuj prve a druhe cislo. Tak sa to robi spravne. Aby ti to fungovalo aj pre cisla mensie ako 0, alebo aj cisla mensie ako minus milion, apod.
Inac nekontroloval som ti to (len som to letmo preletel ocami), ale princip je priblizne tak ako to robis. Ja osobne by som pouzil datovy objekt list (pretoze budes musiet pracovat s mnozinou a aj z nej odstranovat prvky - co je bez listu dost nahovno. Ale da sa to aj bez listu - prejdes cele pole a nejaky prvok vyhodis tak ze od urciteho indexu i budes robit pole[i-1] := pole[i], t.j. v cykle, a cyklus staci zacat na tom prvku ktory chces vyhodit)...

P.S. a okrem hodnoty max. cisel si pamataj aj ich indexy, aby si potom vedel ktore indexy mas z toho pola vyhodit. Napriklad. Zavisi od toho co presne mas robit (zadanie nie je uplne jasne ze co mas robit v pripade ze sa tam vyskytuje najvacsie cislo viackrat)

P.S.2. a ak ste uz preberali to ako vratit hodnotu z nejakej funkcie, prip. predavanie parametrov odkazom (aby si mohol vratit z funkcie dva indexy volajucej funkcii), tak to pouzi, ptz to je podla mna zmysel toho zadania (aby si sa naucil ako vratit z nejakej funkcie viac hodnot do volajucej funkcie - vratis 2 indexy a volajuca funkcia s nimi nieco urobi (vypise, odstrani z pola, zavola hladaciu funkciu s novym zredukovanym polom ...)

OMG co mate vsetci s triedenim. On NEMA za ulohu triedit. Zlozitost najlepsieho triedenia je minimalne O(N x logN), zlozitost toho co ma robit je O(N). Pri 1000 bilionoch cisel by mohol byt rozdiel roky. A potom preco je windows tak pomaly, tam asi tiez kvoli kazdej hovadine mrkvoprogramatori triedia pol disku :). Na komara sa nechodi s gulometom.

Dovolím si podotknout, že zadání patří zadavateli omlátit o hlavu. Není specifikováno o jaký čísla jde - celý, přirozený, reální, komplexní, ... Tudíž to dle mých znalostí nelze vyřešit.

Pavel

Posunuješ problém jinam, jenom stručně :
obecné reálné číslo stroji nezadáš, nanejvýš computable number :

Computable_number

Uspořádání komplexních čísel bys musel nejdřív definovat, to se udělat dá, ale tzv. dobré uspořádání sice existuje podle axiomu výběru, ale nejen já bych ho rád viděl.

Stačí tedy, když zůstaneme u racionálních čísel .

Ovšem na tohle všechno se zadavatel původního dotazu určitě neptal.

Neposunuju problém jinam, s tím rozhodně nesouhlasím. Zadání musí být jednoznačný. Řešitel má proměnný typu integer, ale v zadání nevidím nikde ani
a) omezení čísel na čísla celý
b) omezení ve smyslu max. a min. hodnota

Pavel

Stroji mozes zadat aj obecne realne cislo, ak to tak naprogramoval programator. Kludne by som ti mohol naprogramovat program do ktoreho budes zadavat zlomky a program s nimi bude vediet pracovat.

Prave preto ma Pavel pravdu ze zadanie je uplne nahovno (ono ale skolske zadania su nahovno vzdy, ptz ucitel je zvycajne len pouceny pouzivatel).

BTW. Pavel myslel realne cislo vo forme IEEE-754, je to prakticky uplne dostacujuce a vie s tym pracovat priamo CPU.

Z kontextu mi připadlo, že Pavel nemyslel reálné číslo dle IEEE-754, pokud ano, omlouvám se.:-)

Ad zadání : popravdě řečeno jsem si to integer ani nezaregistroval , ale v dotazu jde přece o tyto jednoduché záležitosti : jak vybrat největší číslo (či dvě) elementární metodou ( souhlasím s Tebou, že sortění je v tomto případě ... ) a jak algoritmus vsunout do procedury a jak ji volat.
Bohužel jsem Pascal už sto let neviděl a nemám jej na PC, takže se bojím sem psát kód nasucho.

Ad zlomky ( racionální čísla) : máš pravdu, však jsem nepsal, že ne.

Ad obecné reálné číslo : reálných čísel je nespočetně mnoho, kdežto algoritmů, které dovedou počítat reálné číslo s libovolnou přesností, je jen spočetně.
Odtud plyne, že takové e, pi nebo odmocnina ze dvou jsou celkem běžná iracionální čísla , mnohem více ( ve smyslu mohutnosti) je těch nepočitatelných.
Ale taky je pravda, že je jaro a děvčata odložila kabátky. :))

Nu, já myslel reálný číslo bez přívlastků. Ale je mi jasný, že při omezené velikosti reprezentace čísla (binárně) nelze dosáhnout nekonečné přesnosti reprezentace všech reálných čísel. Vždy jsme omezeni určitou přesností.

Ale trvám na tom, že prvotní je analýza dat; teprve až na jejím základě lze zapsat program. Jistě, obecně lze algoritmus vyjádřit i bez znalosti vstupních dat; ovšem praktická aplikace algoritmu v progr. jazyku s využitím proměnných prostě dle mých znalostí vyžaduje specifikaci vstuních dat. A na tom trvám.

Pavel

Pokud se má to pole předávat jako parametr procedury, tak to z důvodu typové kompatibility jinak nejde.
BTW to zadání je nedostatečné, bez upřesnění co ta procedura má dělat to asi nepůjde - má se snad to maximum a druhé maximum z toho pole vyjmout? Jinak si totiž nedovedu představit jak je myšleno to "ze zbývajících čísel". Navíc - má se nějak řešit duplicita stejných hodnot? Co když maximální hodnota bude obsažena víckrát? A nejvíc mě tam mate ta "množina" čísel.

Děkuju všem za rady... =o)

Já jsem si to zadání bohužel nevymyslel a ani nejsem zkušený programátor, abych hodnotil kvalitu zadání... =o)
Vzhledem k tomu, že není v zadání, o jaký typ čísel by se mělo jednat, automaticky jsem použil INTEGER. A co se týká duplicity maximálních hodnot, to zatím neřeším...dozvěděl jsem se od vyučujícího, že vstupní hodnoty se mají nakonec načítat ze souboru, tudíž si do připraveného souboru dám čísla "na míru"... =o) Pokud se teda neobjeví lepší nápad...

Ještě jednou díky... =o)

a co je na tom složitého? hledání 2,3 nebo klidně 4 nejmenších/největších čísel je tak pitomě jednoduché... prase mého stylu by to napsalo rekurzí a bylo by po fajrontě. Práskal je na tohle (narozdíl třeba od C, kde si člověk musí spoustu věcí ohlídat sám) jak dělaný...

Zpět do poradny Odpovědět na původní otázku Nahoru