Nie jesteś zalogowany.
Jeśli nie posiadasz konta, zarejestruj je już teraz! Pozwoli Ci ono w pełni korzystać z naszego serwisu. Spamerom dziękujemy!

Ogłoszenie

Prosimy o pomoc dla małej Julki — przekaż 1% podatku na Fundacji Dzieciom zdazyć z Pomocą.
Więcej informacji na dug.net.pl/pomagamy/.

#1  2009-10-28 13:52:27

  Khamell - Użytkownik

Khamell
Użytkownik
Zarejestrowany: 2008-04-24

[Ada95] Obsługa wyjątków, czyszczenie bufora klawiatury

Witam! Czy jest jakis sposób na wyczyszczenie bufora klawiatury w Ada95? Programik zapętla się, gdy podam np. literę zamiast cyfry.

Kod:

WITH Ada.Text_IO;
USE Ada.Text_IO;
WITH Ada.Float_Text_IO;
USE Ada.Float_Text_IO;
WITH Ada.IO_Exceptions;
USE Ada.IO_Exceptions;
PROCEDURE Rownanie IS
   --program pobiera od uzytkownika dwa rownania postaci Ax+By+C=0 i Dx+Ey+F=0
   --po czym metoda macierzowa sprawdza ilosc rozwiazan
   --i ewentualnie wypisuje rozwiazania jednoznaczne
   Wsp_A1,
   Wsp_B1,
   Wsp_C1,
   Wsp_A2,
   Wsp_B2,
   Wsp_C2   : Float   := 0.0;
   Wyroznik,
   Rozw1,
   Rozw2,
   Det1,
   Det2     : Float;
   Koniec   : Boolean := False;
   PROCEDURE Petla_Programu IS
   BEGIN
      WHILE Koniec = False LOOP
         BEGIN

            Put("Do wykonania programu koniecznie jest wprowadzenie dwoch rownan liniowych postaci Ax+By+C=0 i Dx+Ey+F=0");
            New_Line;
            --wczytanie danych do rownan
            Put("Podaj wspolczynnik przy x dla pierwszego rownania: ");
            Get(Wsp_A1);
            Put("Podaj wspolczynnik przy y dla pierwszego rownania: ");
            Get(Wsp_B1);
            Put("Podaj wyraz wolny dla pierwszego rownania: ");
            Get(Wsp_C1);
            Put("Podaj wspolczynnik przy x dla drugiego rownania: ");
            Get(Wsp_A2);
            Put("Podaj wspolczynnik przy y dla drugiego rownania: ");
            Get(Wsp_B2);
            Put("Podaj wyraz wolny dla drugiego rownania: ");
            Get(Wsp_C2);
            New_Line(2);
            Put("Pierwsze rownananie ma postac: ");
            --zilustrowanie postaci rownań (wypisanie ich na standardowe urzadzenie wyjsciowe):
            Put(Wsp_A1,1,1,0);
            Put("x");
            IF Wsp_B1> 0.0 THEN
               Put("+");
            END IF;
            Put(Wsp_B1,1,1,0);
            Put("y");
            IF Wsp_C1>0.0 THEN
               Put("+");
            END IF;
            Put(Wsp_C1,1,1,0);
            Put("=0.0");
            New_Line(2);
            Put("Drugie rownanie ma postac: ");

            Put(Wsp_A2,1,1,0);
            Put("x");
            IF Wsp_B2> 0.0 THEN
               Put("+");
            END IF;
            Put(Wsp_B2,1,1,0);
            Put("y");
            IF Wsp_C2>0.0 THEN
               Put("+");
            END IF;
            Put(Wsp_C2,1,1,0);
            Put("=0.0");
            New_Line(2);
            --obliczenie wyznacznika macierzy kwadratowej
            Wyroznik:=Wsp_A1*Wsp_B2-Wsp_B1*Wsp_A2;
            IF Wyroznik /= 0.0 THEN
               --obliczenie wyznacznikow macierzy powstalych po podstawieniu kolumny wyrazow wolnych w odpowiednie kolumny
               Det1:=(-Wsp_C1)*Wsp_B2-Wsp_B1*(-Wsp_C2);
               Det2:=Wsp_A1*(-Wsp_C2)-(-Wsp_C1)*Wsp_A2;
               --obliczenie rozwiazan
               Rozw1:=Det1/Wyroznik;
               Rozw2:=Det2/Wyroznik;
               Put("Poniewaz wyznacznik jest rowny: ");
               Put(Wyroznik,2,3,3);
               New_Line;
               Put("Rozwiazaniami rownania sa x rowne ");
               Put(Rozw1);
               Put(" i y rowne ");
               Put(Rozw2);
            ELSE
               Put("Rownanie nie ma rozwiazan jednoznacznych");
            END IF;
            Koniec:=True;
            --obsluga bledow:
         EXCEPTION
            WHEN Constraint_Error=>
               Put("Podales liczby o zbyt duzych lub zbyt malych wartosciach");
            WHEN Ada.IO_Exceptions.Data_Error=>
               Put("Wprowadziles niepoprawne dane");
               New_Line;
               Put("Nastapi zakonczenie programu");
            WHEN OTHERS=>
               Put("Wystapil nieznany blad i nastapi zakonczenie programu");
         END;




      END LOOP;
   END Petla_Programu;

BEGIN
   Petla_Programu;
END Rownanie;

Offline

 

Stopka forum

Powered by PunBB
© Copyright 2002–2005 Rickard Andersson
Możesz wyłączyć AdBlock — tu nie ma reklam ;-)