Napiste program, ktory nacita kladne cislo n a vypise nasledujuci riadok ,,dvojkovy zapis n"(2) = ,,desiatkovy zapis n" (10)
PRIKLAD: Pre n = 10 vypise: 1010(2) = 10(10)

Delphi & Pascal (česká wiki)
Přejít na: navigace, hledání
Kategórie: KMP (Programy mladých programátorů)

Autor: Ján Mojžiš
Program: O_sucte_cisel.pas
Soubor exe: O_sucte_cisel.exe


Napiste program, ktory nacita kladne cislo n a vypise nasledujuci riadok ,,dvojkovy zapis n"(2) = ,,desiatkovy zapis n" (10)
PRIKLAD: Pre n = 10 vypise: 1010(2) = 10(10).
OBMEDZENIE: V celom programe mozete pouzit iba procedury bez parametrov a jedinu jednoduchu globalnu premennu.

Rekurzia na minus. Pri vacsom pocte kladnych cisel a poslednom zapornom treba dvakrat zadat na konci 0.
{  ==============                                                              }
{  KSP 15. rocnik        1112: O sucte cisel          Copyright (c) Jan Mojzis }
{  ==============                                                              }
{  Zadanie:                                                                    }
{  Na vstupe mame postupnost nenulovych celych cisel ukoncenych nulou. Napiste }
{  program, kt. nacita tuto postupnost a vypise jej sucet.                     }
{  OBMEDZENIE:                                                                 }
{          V celom programe mozete pouzit iba procedury bez parametrov a jedinu}
{  jednoduchu globalnu premennu.                                               }
{  Napiste program, kt. nacita kladne cislo n a vypise nasledujuci riadok:     }
{                  ,,dvojkovy zapis n"(2) = ,,desiatkovy zapis n" (10)         }
{  PRIKLAD:  Pre n = 10 vypise: 1010(2) = 10(10).                              }
{  OBMEDZENIE:  V celom programe mozete pouzit iba procedury bez parametrov a  }
{  jedinu jednoduchu globalnu premennu.                                        }
{  ----------------------------------------------------------------------------}
{  Rekurzia na minus. Pri vacsom pocte kladnych cisel a poslednom              }
{  zapornom treba dvakrat zadat na konci 0.                                    }
{                                                                              }
{  POZNAMKA:                                                                   }
{        CRT_EFD nie je sucastou tohto riesenia. Kniznicu CRT_EFD pre pracu s  }
{        konzolovymi vypismi mozete stiahnut napriklad na:                     }
{        http://www.stano.wz.sk/index.php?id=8                                 }
{                                                                              }
{  Author: (c) 2007 Jan Mojzis                                                 }
{  Date  : 06.07.2008                                     http://www.trsek.com }
 
 
program o_sucte_cisel;
 
var p : integer;
 
procedure nacitaj;forward;
procedure minus1;forward;
 
procedure minus1;
begin
  if p > 0 then begin                     { Tu je prva najd cast pre cele      }
     dec (p);                             { kladne cisla                       }
     if p <> 0 then minus1;               { cize procedura minus1 je schopna   }
     if p = 0 then nacitaj;               { seba sama volat tolko krat, kolko  }
   inc (p);                               { suctov treba spravit               }
  end                                     { na konci sa musi vyrovnat          }
 
  else
     if p < 0 then begin                 { toto je to iste len inverzne        }
     inc (p);                            { miesto dec je inc                   }
     if p <> 0 then minus1;              { podmienka testovania je ta ista     }
     if p = 0 then nacitaj;              { zaporne sa tiez musia scitat        }
   dec (p);                              { vyrovnanie                          }
  end
 
end;
 
procedure nacitaj;
begin
   writeln('Zadaj cislo');
   readln (p);
    if p <> 0 then
       minus1
    else
       p:=0;
end;
 
begin
   nacitaj;
   writeln(p);
   readln;
end.