Programy zajeb.docx

(24 KB) Pobierz

 

-- Rolety.adb

 

with Ada.Text_Io;         use Ada.Text_Io;

with Ada.Calendar;       use Ada.Calendar;

with Nt_Console;          use Nt_Console;

 

procedure Rolety is

   type Bit is mod 2;

   type Rol is new Integer range 0..100;

   Roleta: Rol := 0;

   Stan: Bit := 0;

   Koniec: Boolean := False;

   Gora: Boolean := True;

 

   task Sterowanie is

      entry Start;

   end Sterowanie;

  

   task Symulacja is

      entry Start;

   end Symulacja;

 

   task body Sterowanie is

      Zn: Character;

   begin

      accept Start;

      loop

         Get_Immediate(Zn);

         case Character'Pos(Zn) is

            when 13 =>

               Stan := Stan + 1;

               if Stan = 0 and Gora = False then Gora := True;

               elsif Stan = 0 then Gora := False;

               end if;

            when 27 =>

               Koniec := True; exit;

            when others => null;

         end case;

      end loop;

   end Sterowanie;

 

   task body Symulacja is

      Czas: Ada.Calendar.Time;

      Przerwa: Duration := 0.1;

   begin

      accept Start;

      Czas := Ada.Calendar.Clock;

      while not Koniec loop

         Goto_Xy(5,5);

         Put_Line(" Rolety : " & Roleta'Img & "   ");

         if Stan = 1 then

            if Gora = True and Roleta < 100 then Roleta := Roleta + 1;

            elsif Gora = False and Roleta >0 then Roleta := Roleta - 1;

            elsif Roleta = 100 then Stan := 0; Gora := False;

            elsif Roleta = 0 then Stan := 0; Gora := True;

            end if;

         end if;

         Czas := Czas + Przerwa;

         delay until Czas; 

      end loop;

   end Symulacja;     

 

begin

   Sterowanie.Start;

   Symulacja.Start;

end Rolety;


-- Klawiatura.adb

 

with Ada.Text_Io;               use Ada.Text_Io;

with Ada.Interrupts;            use Ada.Interrupts;

--with Ada_Interrupts_Names;      use Ada_Interrupts_Names;

with nt_console;                use nt_console;

 

procedure Klawiatura is

Zn: Character;

 

   protected Obsluga is

     -- procedure Steruj;

      --pragma Attach_Handler(Steruj, 1);

      entry Nacisniety(Znak: Character);     

      private

      Warunekb: Boolean := True;

   end Obsluga;

  

   protected body Obsluga is

      procedure Steruj is

      begin

         null;

      end Steruj;

     

      entry Nacisniety(Znak: Character) when Warunekb is

      begin       

         Goto_Xy(25,4);        

         Put("" & Znak); delay 1.0;

      end Nacisniety;      

   end Obsluga;

 

begin

   Goto_Xy(5,4);

   Put_Line(" Nacisnij klawisz : ");

   loop

      Get_Immediate(Zn);

      if Zn = 'k' then exit; end if;

      if Zn = '0' or Zn = '1' or Zn = '2' or Zn = '3' or Zn = '4' or Zn = '5' or Zn = '6' or Zn = '7' or Zn = '8' or Zn = '9' or Zn = '*' or Zn = '#' then

      Obsluga.Nacisniety(Zn); end if;

   end loop;

end Klawiatura;

  


-- Generator fali prostokatnej

 

with Ada.Text_Io;            use Ada.Text_Io;

with Ada.Float_Text_IO;      use Ada.Float_Text_IO;

with Ada.Calendar;           use Ada.Calendar;

with Gen;                    use Gen;

with Nt_Console;             use Nt_Console;

 

procedure Falaprostokatna is

   Czestotliwosc, Cz2: Duration := 1.0;

   Wypelnienie: Duration := 50.0;

   Koniec: Boolean := False;

 

   task Sterowanie is

      entry Start;

      entry Restart;

   end Sterowanie;

  

   task Gen is

      entry Cz;

      entry W;

      entry Stop;

   end Gen;

 

   protected Generowanie is

      procedure Generuj;

   end Generowanie;

 

   task body Sterowanie is

   Zn: Character;

   begin

      accept Start;

      loop

         Get_Immediate(Zn);

         case Zn is

            when 'c'

                  => Gen.Cz;  accept Restart;        

            when 'w'

                  => Gen.W;    accept Restart;

            when Character'Val(27)

                  => Koniec := True; Gen.Stop;

                     exit; 

            when others

                  => null;

         end case; 

      end loop;

   exception

      when others => Put_Line("Blad w zadaniu 'Sterowanie'");

   end Sterowanie;

 

   task body Gen is

      Czestot,Czestot2: Float;

      Wspol: Float;

   begin

      loop

         select

            accept Cz;

            Goto_Xy(5,8); Put_Line(" Podaj czestotliowsc : ");

            Get(Czestot);

            if Czestot > 1.0 then Czestot := 1.0;

            elsif Czestot < 0.001 then Czestot := 0.001;

            end if;

            Wspol := Float(Wypelnienie);

            Wspol := Wspol/100.0;

            Czestot2 := Czestot*(1.0-Wspol);

            Czestot2 := Czestot2/Wspol;

            Cz2 := Duration(Czestot2);

            Czestotliwosc := Duration(Czestot);

            Clear_Screen(Black);

            --Sterowanie.Restart;

            or

            accept W;

            Goto_Xy(5,9); Put_Line(" Podaj wspolczynnik wypelnienia : ");

            Get(Wspol);

            if Wspol > 100.0 then Wspol := 100.0;

            elsif Wspol < 0.0 then Wspol := 0.0;

            end if;

            Czestot := Float(Czestotliwosc);

            Wspol := Wspol/100.0;

            Czestot2 := Czestot*(1.0-Wspol);

            Czestot2 := Czestot2/Wspol;

            Wspol := Wspol*100.0;

            Cz2 := Duration(Czestot2);

            Wypelnienie := Duration(Wspol);

            Clear_Screen(Black);

            --Sterowanie.Restart;

            or

            accept Stop;

            exit;

         end select;

         Sterowanie.Restart;

      end loop;

   end Gen;

 

   protected body Generowanie is

      procedure Generuj is

         Zmienna: Bit := 0;

         Zmiana: Ada.Calendar.Time;

      begin

         Zmiana := Ada.Calendar.Clock;

         loop

            if Koniec = True then exit; end if;

            Zmienna := Zmienna + 1;

            Goto_Xy(15,5); Put_Line("" & Wypelnienie'Img & " " & Czestotliwosc'Img);

            Goto_Xy(5,10); Put_Line(" esc - zakonczenie programu ");

            Goto_Xy(5,12); Put_Line(" c - zmiana czestotliwosci ");

            Goto_Xy(5,11); Put_Line(" w - zmiana wsp wypalnienia ");

            Goto_Xy(5,5); Put_Line("" & Zmienna'Img);

            if Zmienna = 1 then Zmiana := Zmiana + Czestotliwosc;

            else Zmiana := Zmiana + Cz2;

            end if;

            delay until Zmiana;

         end loop;

      end Generuj;

   end Generowanie;

  

begin

   Sterowanie.Start;

   Generowanie.Generuj;  

end Falaprostokatna;


-- Budzik.adb

 

with Ada.Text_IO;            use Ada.Text_IO;

with Ada.Calendar;           use Ada.Calendar;

with nt_console;             use nt_console;

 

procedure Budzik is

   type Minsek is mod 60;

   type Godz is mod 24;

   M,S,Sb,Mb: Minsek := 0;

   G,Gb: Godz := 6;

   Przerwa: Duration := 1.0;

   Godzina: Ada.Calendar.Time;

   Koniec: Boolean := False; 

   Alarm: Boolean := False;

 

   task Zegar is

      entry Start;

   end Zegar;

  

   task Sterowanie is

      entry Start;

   end Sterowanie;

  

   task body Zegar is

      Zn: Character;

   begin

      accept Start;

      Goto_Xy(5,5);

      Put_Line(" Ustaw godzine alarmu : ");     

      Goto_Xy(5,8);     

      Put_Line(" g - zmiana godziny ");

      Goto_Xy(5,9);    

      Put_Line(" m - zmiana minuty ");

      Goto_Xy(5,10);     

      Put_Line(" s - start budzika ");          

      loop        

         Goto_Xy(5,6);        

         Put_Line("" & Gb'Img & " : " & Mb'Img & " : " & Sb'Img & "  ");       

         Get_Immediate(Zn);        

         if Zn = 'g' then Gb := Gb + 1;        

         elsif Zn = 'm' and Mb = 59 then Gb := Gb + 1; Mb := Mb + 1;        

         elsif Zn = 'm' then Mb := Mb + 1;        

         elsif Zn = 's' then exit;                 

         end if;             

      end loop;

      Sterowanie.Start;

      Goto_Xy(5,11);    

      Put_Line(" k - wylacz budzik ");

      Godzina := Ada.Calendar.Clock;

      while not Koniec loop

         Goto_Xy(5,7);

         Put_Line("" & G'Img & " : " & M'Img & " : " & S'Img & "  ");

         if M = 59 and S = 59 then G := G + 1; M := M + 1; S := S + 1;

         elsif S = 59 then M := M + 1; S := S + 1;

         else S := S + 1;

         end if;

         if G = Gb and M = Mb and S = Sb then Alarm := True; end if;

         if Alarm = True then

            Goto_Xy(5,12);

            Set_Foreground(Red);

            Put_Line(" w - wylacz alarm ");

         else

            Goto_Xy(5,12);

            Put_Line("                  ");

            Set_Foreground(White);

         end if;

         Godzina := Godzina + Przerwa;

         delay until Godzina;

      end loop;          

   end Zegar;

 

   task body Sterowanie is

      Zn: Character;

   begin

      accept Start;

      loop

         Get_Immediate(Zn);

         if Zn = '1' then Przerwa := 1.0;

         elsif Zn = '2' then Przerwa := 0.1;

         elsif Zn = '3' then Przerwa := 0.01;

         elsif Zn = '4' then Przerwa := 0.001;

         elsif Zn = '5' then Przerwa := 0.0001;

         elsif Zn = 'w' and Alarm = True then Alarm := False;

         elsif Zn = 'k' then Koniec := True; exit; end if;

      end loop;

   end Sterowanie;

...

Zgłoś jeśli naruszono regulamin