Pyramida - Pascal

Programovacie jazyky, rady, poradňa...
Gregi
Light Star
Light Star
Príspevky: 224
Registrovaný: 24 mar 2005, 11:34

Pyramida - Pascal

Príspevok od používateľa Gregi »

Ahojte.
Nedavno som riesil na inom fore zadanie vykreslenia piramidy. Riesenie som urobil, ale mne sa akosi nezda. Nie funkcnostou, ale efektivitou. Vedel by mi dajaky skusenejsi programator poradit, kdeze by sa to dalo zefektivnit? Prinajmensom mnozstvo premennych, ktore som pouzil ma zaraza! Riesenie pocita s parnou i neparnou zakladnou.
Diky za kazdy postreh. Kludne povolujem pouzit i figle (teda okrem ASM). Tam to chcem riesit sam :)
este spomynany kod:

Kód: Vybrať všetko

program PIRAMIDA; 
 uses Crt; 
 var 
   i,j,k,zakladna,medzery: Integer; 

 BEGIN 
   ClrScr; 
   Write('zadaj velkost zakladne piramidy: '); 
   ReadLn(zakladna); 
   medzery := Trunc(zakladna/2); 
   for i := medzery downto 0 do begin 
     for j := 1 to i do 
       Write(' '); 
     k := 0; 
     while k < ((medzery-i)*2)+(zakladna-medzery*2) do begin 
       Write('*'); 
       inc(k); 
     end; 
     WriteLn; 
   end; 
   ReadLn; 

 END.
audiotrack
VIP
VIP
Používateľov profilový obrázok
Príspevky: 25958
Registrovaný: 09 sep 2005, 18:39
Kontaktovať používateľa:

Re: Piramida - Pascal

Príspevok od používateľa audiotrack »

premenná j a k môže byť tá istá. Po skončení cyklu s premennou j túto premennú už viac nepoužívaš, takže do while cyklu môžeš namiesto k dať zase j. To ti odpadne jedna premenná.
Premenná medzery je tiež zbytočná. Do prvého cyklu for ten výraz Trunc(zakladna/2) a v druhom cykle (while) ju vôbec nepotrebuješ, lebo to vieš zapísať krajšie. Vôbec by som tam nepoužil while cyklus, ale for j:=0 to zakladna-2*i
Tým pádom budeš mať premenné i,j,zakladna
Gregi
Light Star
Light Star
Príspevky: 224
Registrovaný: 24 mar 2005, 11:34

Re: Pyramida - Pascal

Príspevok od používateľa Gregi »

Diky za postreh, ale potom mi to predsa neriesi opat parnu a neparnu zakladnu. Dokonca to nerobi spravne ziadne zadanie. Mozno som zle pochopil tu Tvoju optimalizaciu.

Kód: Vybrať všetko

program PYRAMIDA;
uses Crt;
var
  i,j,zakladna: Integer;

BEGIN
  ClrScr;
  Write('zadaj velkost zakladne pyramidy: ');
  ReadLn(zakladna);
  for i := Trunc(zakladna/2) downto 0 do begin
    for j := 1 to i do
      Write(' ');
    for j := 1 to zakladna-2*i do
      Write('*');
    WriteLn;
  end;
  ReadLn;

END.
edit: tak v tom druhom cikle malo byt namiesto 0 - 1 :-) Uz asi ziadne zlepsenie nevidis, co? Ci predsa? Len napovedz. Budem sa snazit ho najst.
Napísať odpoveď