Program v Delphi – Delphi – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu
Reklama
Reklama

Program v Delphi – Delphi – Fórum – Programujte.comProgram v Delphi – Delphi – Fórum – Programujte.com

 

Hledá se programátor! Plat 1 800 € + bonusy (firma Boxmol.com)
JuReeeC
~ Anonymní uživatel
9 příspěvků
24. 4. 2012   #1
-
0
-

Mám zadání programu:

SESTAVTE PROCEDURU PRO NALEZENI NEJVETSIHO CISLA V DANEM POLI O N CISLECH
    A URCENI JEHO INDEXU. POUZIJTE TETO PROCEDURY PRO RESENI TETO ULOHY:
    JE DANO N CISEL (N<=100). VYTISKNETE JE V PORADI OD NEJVETSIHO DO NEJMENSIHO TAK
    ZE NEJPRVE NAJDETE NEJVETSI CISLO, ZE ZBYTKU OPET NEJVETSI, ATD. AZ DO
    POSLEDNIHO. PROVEDTE PRO TYTO SKUPINY:
    -1,7,-8,9,-3,0,4;  0,2,5,-1,-3,-6,7,9,-2.

Tady jsem vyzkoušel řešení:

program Project2;

{$APPTYPE CONSOLE}

uses
  SysUtils;

type
  tpole=array[1..100] of integer;
var z:tpole;
    e,y,n,i,m:integer;

procedure maximum (a:tpole;q:integer;var max,index:integer);
var
    k:integer;
begin
max:=a[1];
   index:=1;
   for k:=2 to q do
      if a[k]>max then begin
         max:=a[k];
         index:=k;
      end;
end;

begin
   write ('zadej pocet prvku posloupnosti: ');
   readln (n);
   for i:=1 to n do begin
      write ('zadej prvek a[',i,']: ');
      readln (z[i]);
   end;
   m:=z[1];
   for i:=1 to n do
      if m>z[i] then m:=z[i];
   for i:=1 to n do begin
      maximum (z,n,e,y);
      writeln (e);
      z[y]:=m;
   end;
   writeln;
   writeln ('stiskni klavesu "enter"');
   readln;
end.
  { TODO -oUser -cConsole Main : Insert code here }
end.

JE TO SPRÁVNĚ? A ještě bych potřeboval poradit s tímto:

POSLEDNIHO. PROVEDTE PRO TYTO SKUPINY:
    -1,7,-8,9,-3,0,4;  0,2,5,-1,-3,-6,7,9,-2.

Co to znamená? Děkuji za ověření a za případné připomínky

Nahlásit jako SPAM
IP: 88.103.184.–
Reklama
Reklama
JoDiK
~ Anonymní uživatel
981 příspěvků
24. 4. 2012   #2
-
0
-

#1 JuReeeC
Co to znamená?

PROVEDTE PRO TYTO SKUPINY:
    -1,7,-8,9,-3,0,4;  0,2,5,-1,-3,-6,7,9,-2.

To znamená, že to jsou dva příklady vstupních dat na kterých to máš otestovat...

Nahlásit jako SPAM
IP: 88.103.233.–
Honzc0
Stálý člen
25. 4. 2012   #3
-
0
-

#1 JuReeeC
Skoro správně.

Je potřeba smazat dva poslední řádky - tedy

{ TODO -oUser -cConsole Main : Insert code here }
end.

Jenom taková malá poznámka:

Tobě to teď vypisuje čísla pod sebou každé zvlášť na jeden řádek.

Aby ti to vypisovalo seřazenou řadu stejně jako máš zadání (to je v jednom řádku, čísla oddělená čárkou),

tak přidej do var ještě proměnnou znak: String; a maličko uprav druhý cyklus kde máš proceduru maximum.

Takto:

WriteLn;
   for i:=1 to n do begin
      maximum (z,n,e,y);
      if i<n then
        znak := ','
      else
        znak := '';
      write(e,znak);
      z[y]:=m;
   end;

Nahlásit jako SPAM
IP: 93.181.78.–
JoDiK
~ Anonymní uživatel
981 příspěvků
25. 4. 2012   #4
-
0
-

#3 Honzc
Skoro správně :-)

Jednodušší a bez proměnné string (stačilo by i char) by to mohlo být takto:

writeln;
  for i:=1 to n do begin
      maximum (z,n,e,y);
      write(e);
      if i<n then write(',') else write(';');
      z[y]:=m;
   end;

#1 JuReeeC

Zkus si příště nějak rozumněji pojmenovat proměnné, takhle se v tom fakt blbě orientuje...

proč se m nejmenuje min, e proč není max a y třema imax nebo index?

Nahlásit jako SPAM
IP: 88.103.236.–
JoDiK
~ Anonymní uživatel
981 příspěvků
25. 4. 2012   #5
-
0
-

#4 JoDiK
BTW: to zadání je fakt divný, formulace:

TAK, ZE NEJPRVE NAJDETE NEJVETSI CISLO, ZE ZBYTKU OPET NEJVETSI, ATD.

je podivná, nevím jak bych jednoduše vyřešil to "ZE ZBYTKU"...

Tys to vyřešil tak, že jsi postupně nalézaná maxima vždy nahradil minimem, takže na konci máš posloupnost plnou nx stejnou a to nejmenších hodnotou. Kdyby se to pole mělo dále zpracovávat, tak by to takhle nešlo...

Doslovně vzato jsi ale zadání nevyřešil, protože neprohledáváš v dalších krocích "ZBYTEK" posloupnosti, ale vždy celou posloupnost, ale jak říkám, tohle nijak jednoduše vyřešit nejde...

Jedině snad (navíc, když se měl zjišťovat i index maxima) by to šlo udělat tak, že by se po každém jednom průchodu a vypsání maxima prohodilo maximum s číslem na poslední pozici a v dalším kroku se opravdu hledalo už jen ve zbytku posloupnosti. Navíc by tam zůstaly původní čísla a ještě hezky seřazené... To už by se ale rovnou mohlo seřadit sestupně a nemuselo se hledat maximum... Tak nic...

Nahlásit jako SPAM
IP: 88.103.236.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 11 hostů

Podobná vlákna

Program v Delphi — založil Jack

Delphi-program — založil Petr Jureček

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032016 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý