Подаръци и коледни звезди

Напишете програма, която позволява да въведете какви подаръци искате за Коледа (повече от една дума0 и ги отпечатва:

  • оградени с по една звезда
  • всяка дума на нов ред
  • всяка дума разделена от останалите с една звезда
  • всяка дума оградена с звезди от двете страни
  • целият текст ограден с кутия от звезди
  • текстът отзад напред
Публикувано в 10a с етикети . Постоянна връзка.

7 коментара по Подаръци и коледни звезди

  1. Боряна каза:
    program Project1;
    var
      p: string;
      izbor: integer;
    
    // оградени с по една звезда
    procedure OgradenPodarak(p: string);
    var
      i: integer;
    begin
      Write('* ');
      for i:=1 to Length(p) do
        if (p[i]=',') then begin
          WriteLn(' *');
          Write('*');
        end
        else
          Write (p[i]);
      WriteLn(' *');
    end;
    
    //всяка дума на нов ред
    procedure NaNovRed(p: string);
    var
      i: integer;
    begin
      WriteLn;
      for i:=1 to Length(p) do
        if ((p[i]=',') or (p[i]=' ')) then
          WriteLn
        else
          Write (p[i]);
        WriteLn;
    end;
    
    // всяка дума разделена от останалите с една звезда
    procedure Granica(p: string);
    var
      i: integer;
    begin
      WriteLn;
      Write('* ');
      for i:=1 to Length(p) do
        if (p[i]=',') then
          Write('* ')
        else
          Write (p[i]);
      WriteLn(' *');
    end;
    
    // всяка дума оградена с звезди от двете страни
    procedure Ograda(p: string);
    var
      i: integer;
    begin
      WriteLn;
      Write('*');
      for i:=1 to Length(p) do
        if ((p[i]=',') or (p[i]=' ')) then
          Write('* *')
        else
          Write (p[i]);
      WriteLn('*');
    end;
    
    // целият текст ограден с кутия от звезди
    procedure Kutia(p: string);
    var
      i, l: integer;
    begin
      WriteLn;
      l:=Length(p);
      for i:=1 to (l+4) do
        Write('*');
      WriteLn;
      Write('* ');
      for i:=1 to l do
          Write (p[i]);
      WriteLn(' *');
      for i:=1 to (l+4) do
        Write('*');
      WriteLn;
    end;
    
    //всички на едно
    procedure Vsichki(p: string);
    begin
      WriteLn('Ako ne mojete da reshite,  shte izvedem pismoto po vseki nachin!');
      OgradenPodarak(p);
      NaNovRed(p);
      Granica(p);
      Ograda(p);
      Kutia(p);
      WriteLn;
    end;
    
    begin
      //въвеждане на подаръците
      WriteLn('Kakvi podaraci iskate? Vavedete gi (po vazmojnost s poveche ot edna duma). ');
      WriteLn('Otdelete gi sas zapetai.');
      ReadLn(p);
      WriteLn;
    
      //избор на начин на извеждане
      WriteLn('Chudesno! A v kakav vid da sa v pismoto do Diado Koleda?');
      WriteLn('Izberete ot slednite varianti: ');
      WriteLn('1 - vseki podarak da e ograden s po edna zvezda');
      WriteLn('2 - vsiaka duma da e na nov red');
      WriteLn('3 - vsiaka duma da e razdelena ot ostanalite s po edna zvezda');
      WriteLn('4 - vsiaka duma da e ogradena s po edna zvezda ot vsiaka strana');
      WriteLn('5 - celia text da e v kutia ot zvezdi');
      WriteLn('Vavedete chisloto na opciata, koiato haresvate.');
      WriteLn('Ako ne movete da reshite, vavedete 0: ');
      ReadLn(izbor);
    
      case izbor of
      1: OgradenPodarak(p);
      2: NaNovRed(p);
      3: Granica(p);
      4: Ograda(p);
      5: Kutia(p);
      0: Vsichki(p);
      end;
    
      //край
      WriteLn;
      WriteLn('Chudesno! Pismoto vi e izprateno! Veseli praznici!');
      ReadLn;
    end.
    
  2. Alya каза:

    S Viki ;o

    program Project1;
    var
      Z: string;
      i: integer;
    begin
      WriteLn('Kakuv podarak iskate za Koleda?');
      ReadLn(z);
      WriteLn;
    
      //подаръкът ограден с по една звезда
      for i:= 1 to length(z) do
          if (z[i]=' ') then
             WriteLn(' *',z,'*');
      WriteLn;
    
      //всяка дума на нов ред
      for i:= 1 to length(z) do
          if (z[i]=' ') then
             WriteLn
          else Write(z[i]);
      WriteLn;
      WriteLn;
    
      //всяка дума разделена от останалите с една звезда
      for i:= 1 to length(z) do
          if (z[i]=' ') then
             Write(' * ')
          else Write(z[i]);
    
      //всяка дума оградена с звезди от двете страни
      for i:= 1 to length(z) do
          if (z[i]=' ') then
             Write(' * ')
          else Write(z[i]);
      WriteLn;
      WriteLn;
    
      //целият текст ограден с кутия от звезди
      for i:= 1 to length(z) + 2 do
          Write('*');
    
      Writeln;
      Write('*',z,'*');
      WriteLn;
    
      for i:= 1 to length(z) + 2 do
          Write('*');
      ReadLn;
    end.
    
    • Данаил каза:

      Много добре форматирана и коментирана задача! Но редове 11, 12 са излишни а точката „всяка дума оградена с звезди от двете страни“ не е изпълнена – кодът е като на горната точка. :-)

  3. procsy каза:
     program Project1;
    Procedure ogradeniszwezdichka;
    var
      S:string[40];
        i:integer;
    begin
      Writeln(' Wawedete podaruka koito iskate za koleda kato zapochnete i swurshite s zwezdichka ,dumite razdeleni s interval');
      Readln(s);
      Writeln('Podaruka koito si pojelahte e: ');
    For i:=1 to length(s) do
      Write(s[i]);
    end;
    
    Procedure dumananovred;
    var
      S:string[40];
        i:integer;
    begin
      Writeln(' Wawedete podaruka koito iskate za koleda kato zapochnete i swurshite s zwezdichka ,dumite razdeleni s interval');
    Readln(s);
      Writeln('Podaruka koito si pojelahte e: ');
    For i:=1 to length(s) do begin
    if s[i]=' ' then
      Writeln
    else
      Write(s[i]);
    end;
    end;
    
    Procedure zwezdaposredata;
    var
      S:string[40];
        i:integer;
    begin
      Writeln(' Wawedete podaruka koito iskate za koleda kato dumite da sa razdeleni s interval');
    Readln(s);
      Writeln('Podaruka koito si pojelahte e: ');
    For i:=1 to length(s) do begin
    if s[i]=' ' then
      Write('*')
    else
      Write(s[i]);
    end;
    end;
    
    Procedure SZwezdichkiOtWsqkade;
    var
      S:string[40];
        i:integer;
    begin
      Writeln(' Wawedete podaruka koito iskate za koleda kato zapochnete i swurshite s zwezdichka ,dumite razdeleni s interval');
    Readln(s);
      Writeln('Podaruka koito si pojelahte e: ');
    For i:=1 to length(s) do begin
    if s[i]=' ' then
      Write('**')
    else
      Write(s[i]);
    end;
    end;
    
    Procedure KutiqOtZwezdichki;
    var
      S:string[40];
      p:string;
      i:integer;
    begin
      Write(' Wawedete podaruka koito iskate za koleda kato dumite da sa razdeleni s interval');
    Readln(s);
      Writeln;
      Writeln('Podaruka koito si pojelahte e: ');
      p:='';
      For i:=1 to length(s) do begin
        p:=p+'*';
      end;
        Writeln(p,'**');
        Writeln('*',s,'*');
        Writeln(p,'**');
    end;
    var x:integer;
    begin
    Writeln('Kak iskate da se otpechata na ekrana washiqt liubim podaruk:');
    Writeln('1:Ogradeni s edna zwezdichka');
    Writeln('2:Wsqka duma na nov red');
    Writeln('3:Wsqka duma razdelena ot dr s edna zwezda');
    Writeln('4:Wsqka duma ogradena s zwezdi ot dwete strani');
    Writeln('5:Kutiq ot Zwezdichki');
    readln(x);
    If x = 1 then ogradeniszwezdichka;
    If x = 2 then dumananovred;
    If x = 3 then zwezdaposredata;
    If x = 4 then SZwezdichkiOtWsqkade;
    If x = 5 then KutiqOtZwezdichki;
    readln;
    end.         
    • Данаил каза:

      Браво, Любо! Много ми хареса как образуваш низ от звездички! Обърни обаче внимание на повтарящите се неща – те могат да бъдат в главната програма, преди процедурите. И не е редно да казваш на потребителя да въведе със звездички – той да си въвежда текста, а ти добави звездичките.

  4. Svetli каза:
    program Project1;
    
    //за ограждане на текста с по една звезда
    procedure OgradisusZvezdi(s:string; i:integer);
    begin
      Write('*');
      for i:= 1 to Length(s) do
        Write(s[i]);
      Writeln('*');
    end;
    
    //за извеждане на всяка дума на нов ред
    procedure Dumananovred(s:string; i:integer);
    begin
      Writeln;
      for i:= 1 to Length(s) do
        if s[i] <> ' ' then
           Write(s[i])
        else
           Writeln(s[i]);
    
    end;
    
    //за разделяне на всяка дума от останалите с една звезда
    procedure RazdelenisusZv(s:string; i:integer);
    begin
      Writeln;
      Write('*');
      for i:= 1 to Length(s) do begin
        if s[i] <> ' 'then
           Write(s[i])
        else
           Write('*')
      end;
      Write('*');
    
    end;
    
    //за ограждане на всяка дума със звезди от двете страни
    procedure DumaOgradenaZv(s:string; i:integer);
    begin
      Writeln;
      Write('*');
      for i:= 1 to Length(s) do begin
        if s[i] <> ' ' then
           Write(s[i])
        else
           Write('* *')
      end;
      Write('*');
    
    end;
    
    //за ограждане на целият текст като кутия от звезди
    procedure KutiqotZv(s:string; i,j:integer);
    begin
      Writeln;
      for j:= 1 to (Length(s)+2) do
          Write('*');
    
      Writeln;
      Write('*');
      for i:= 1 to Length(s) do
         if s[i] <> ' 'then
           Write(s[i])
        else
           Write('*');
      Write('*');
      Writeln;
    
      for j:= 1 to (Length(s)+2) do
          Write('*');
    
      end;
    
    //за отпечатване на текстът отзад напред
    procedure OtzadNapred(s:string; i:integer);
    begin
      for i:= Length(s) downto 1 do
        Write(s[i]);
    end;
    
    //декларация на променливите
    var
      s:string;
      i,j,o:integer;
    
    begin
      Writeln('Vavedete kakvi podaruci iskate za Koleda! No molq otdelqite gi s interval');
      Readln(s);
      Writeln;
    
      //Отпечатване на възможните функции
      Writeln('Molq izberete kakvo iskate da se sluchi s podarucite:');
      Writeln('*****************************************************');
      Writeln('1 - za ograjdane na podarucite ot dvete strani s edna zvezda');
      Writeln('2 - za izvejdane na podarucite na nov red');
      Writeln('3 - za razdelqne na vseki podaruk ot ostanalite s po edna zvezda');
      Writeln('4 - za ograjdane na vseki podaruk sus zvedi otstrani');
      Writeln('5 - za ograjdane na podarucite v kutiq ot zvezdi');
      Writeln('6 - za otpechatvane na podarucite otzad napred');
      Writeln;
      Readln(o);
    
      //за избор на функция
      case o of
      1:OgradisusZvezdi(s,i);
      2:Dumananovred(s,i);
      3:RazdelenisusZv(s,i);
      4:DumaOgradenaZv(s,i);
      5:KutiqotZv(s,i,j);
      6:OtzadNapred(s,i);
      else
        Writeln('Sujelqvam mnogo iskate, imam nujda ot pochivka');
      end;
    
      Readln;
    end.
    

    Направих тази задача след всички други, защото исках малко да „по тренирам“ с по-лесните. Не съм гледал останалите решенията, по време на писането на програмата. П.С. Направих програмата сега, защото надали щях да мога да спя в противен случай!

    • Данаил каза:

      Много добро решение! :-) И отлично оформена!Само когато извеждаш целия низ, не е нужно да го правиш символ по символ, може директно. И си прочети пак презентацията за параметрите на функциите и локалните променливи – не е нужно всичко да са параметри, част от нещата е по-удачно да са локални променливи. Това ти е 6-тото решение, бая си се ядосал на низовете май! :-D

Вашият коментар