[Ada 95] Operacje na punktach i plikach, aproksymacja funkcj

SmoQ
Użytkownik
Użytkownik
Posty: 7
Rejestracja: 5 paź 2010, o 23:39
Płeć: Mężczyzna
Lokalizacja: Łódź

[Ada 95] Operacje na punktach i plikach, aproksymacja funkcj

Post autor: SmoQ »

Witam,
Mam pewne zadanie do wykonania i niestety mam z nim mega problem... Składa się ono z paru części... Operacjach na punktach i plikach oraz aproksymacja funkcji... Co do tego ostatniego to nigdy tego nie miałem, więc jest to dla mnie jeszcze większy problem... Języka Ada dopiero zacząłem się uczyć, ale ciężko mi on idzie...
Mam nadzieję, że znajdzie się ktoś i pomoże tyle ile będzie w stanie Każda pomoc tutaj się liczy!

Treść:

Operacje na punktach
Napisać pakiet w języku Ada, zawierający definicję typu rekordowego opisującego punkt na płaszczyźnie oraz następujące operacje działające na tym typie (użyte zmienne mają być typu float)
  • * operatory arytmetyczne \(\displaystyle{ +,-}\) oraz operator porównania \(\displaystyle{ =}\)
    * procedurę put, wyświetlającą punkt w formacie \(\displaystyle{ x;y}\)
    * procedurę get, pobierającą punkt w formacie \(\displaystyle{ x;y}\)
    * funkcję przyjmującą jako parametr współrzędne trzech punktów i sprawdzającą, czy trzeci z podanych punktów leży na prostej łączącej dwa pierwsze
Należy takzę napisać prosty program, który demonstruje działanie zdefiniowanych operacji.

Uwaga: Pakiety należy zapisywać w osobnych plikach źródłowych języka Ada.


Operacje plikowe
Pakiet z poprzedniego zadania rozszerzyć o funkcje/procedury służące do:
  • * wczytania tablicy punktów z pliku
    * zapisania tablicy punktów do pliku oraz sortowania ich względem pierwszej współrzędnej
W przypadku wczytywania należy wziąć pod uwagę, że nie jest z góry znana ilość punktów. Można natomiast założyć, że każda linia wczytywanego pliku zawiera prawidłowe wartości określające punkt. Należy także napisać prosty program, który demonstruje działanie zdefiniowanych operacji, tj. wczyta zestaw punktów z dowolnego podanego przez użytkownika pliku, posortuje je i zapisze do dowolnego pliku.

Uwaga: Należy uwzględnić obsługę wyjątków podczas wykonywania operacji plikowych.


Aproksymacja funkcji
Pakiet z poprzedniego zadania rozszerzyć o funkcję dokonującą aproksymacji funkcji wyznaczonej przez zbiór punktów w dowolnym punkcie o odciętej leżącej w przedziale określonym przez wspomniany zbiór punktów. Funkcja aproksymująca musi posiadać dwa warianty: jeden wykorzystujący najprostszą aproksymację liniową i jeden wykorzystujący dowolną aproksymację nieliniową. Parametrami funkcji aproksymującej są: tablica punktów określających funkcję aproksymowaną oraz odcięta badanego punktu.
Wskazówka: Funkcja aproksymująca znacznie się upraszcza, jeżeli założyć, że tablica punktów przekazywana jako parametr jest posortowana względem odciętych punktów.
Należy także napisać prosty program, który zademonstruje działanie zdefiniowanych operacji, tj. wczyta zestaw punktów z dowolnego, podanego przez użytkownika pliku u dokona aproksymacji określonej przez ten zestaw funkcji. Aproksymacja ma być dokonana dla wszystkich punktów z przedziału odciętych określonego przez zbiór punktów definiujących funkcję (dla przykładowego pliku jest to przedział \(\displaystyle{ 0..10}\)) z krokiem podanym przez użytkownika. Uzyskany zbiór punktów ma zostać zapisany do pliku.


Punkt przecięcia
Pakiet z poprzedniego zadania rozszerzyć o funkcję znajdującą punkt przecięcia funkcji wyznaczonej przez zbiór punktów wczytany z pliku z funkcją kwadratową o podanych przez użytkownika współczynnikach. Punkt ma być znaleziony z dokładnością podaną przez użytkownika.
Wskazówka: Można sprowadzić równanie do postaci \(\displaystyle{ \text{aprox}(x)-A x^{2}-Bx-C=0}\) i użyć dowolnego algorytmu znajdowania miejsc zerowych, np. prostego algorytmu bisekcji. Można założyć, że w badanym przedziale będzie dokładnie jeden punkt przecięcia obu funkcji (wymagane przez wiele algorytmów).
Należy także napisać prosty program, który zademonstruje działanie zdefiniowanych operacji.


To by było na tyle tej treści... Będę wdzięczny za każdą pomoc i wyjaśnienie wszystkiego czego się da... Bardzo mi na tym zależy.-- 31 paź 2011, o 12:59 --Naprawdę nikt nie jest w stanie w żaden sposób pomóc?
Ostatnio zmieniony 29 paź 2011, o 21:46 przez Anonymous, łącznie zmieniany 1 raz.
Powód: Poprawa wiadomości.
maniekl2
Użytkownik
Użytkownik
Posty: 3
Rejestracja: 24 paź 2011, o 20:54
Płeć: Mężczyzna
Lokalizacja: Zgierz

[Ada 95] Operacje na punktach i plikach, aproksymacja funkcj

Post autor: maniekl2 »

Mam ten sam problem, jak coś znajdziesz to daj znać
ziomal601
Użytkownik
Użytkownik
Posty: 9
Rejestracja: 2 paź 2007, o 17:27
Płeć: Mężczyzna
Lokalizacja: Łódź

[Ada 95] Operacje na punktach i plikach, aproksymacja funkcj

Post autor: ziomal601 »

Dam kilka wskazówek dotyczących Ady....
Pierwsze zadanie :
1. Istnieje coś takiego jak przeciążanie operatorów
2. zatrzymaj sie i pomyśl przy porównywaniu |
3. Konwersja string na float ...
Więcej wskazówek podam jak pomyśle nad następnymi
SmoQ
Użytkownik
Użytkownik
Posty: 7
Rejestracja: 5 paź 2010, o 23:39
Płeć: Mężczyzna
Lokalizacja: Łódź

[Ada 95] Operacje na punktach i plikach, aproksymacja funkcj

Post autor: SmoQ »

Hm a Ty skąd? Politechnika Łódzka?
ziomal601
Użytkownik
Użytkownik
Posty: 9
Rejestracja: 2 paź 2007, o 17:27
Płeć: Mężczyzna
Lokalizacja: Łódź

[Ada 95] Operacje na punktach i plikach, aproksymacja funkcj

Post autor: ziomal601 »

Tak. Informatyka rok 1 gr 7
SmoQ
Użytkownik
Użytkownik
Posty: 7
Rejestracja: 5 paź 2010, o 23:39
Płeć: Mężczyzna
Lokalizacja: Łódź

[Ada 95] Operacje na punktach i plikach, aproksymacja funkcj

Post autor: SmoQ »

grupa 3 się kłania jakbyś coś wiedział daj znać:P
ziomal601
Użytkownik
Użytkownik
Posty: 9
Rejestracja: 2 paź 2007, o 17:27
Płeć: Mężczyzna
Lokalizacja: Łódź

[Ada 95] Operacje na punktach i plikach, aproksymacja funkcj

Post autor: ziomal601 »

ogólnie te zadania mam zrobione, ale gotowych kodów Ci nie dam, ew po zaliczeniu Mogę Ci dawać podpowiedzi jak będziesz miał pytania
maniekl2
Użytkownik
Użytkownik
Posty: 3
Rejestracja: 24 paź 2011, o 20:54
Płeć: Mężczyzna
Lokalizacja: Zgierz

[Ada 95] Operacje na punktach i plikach, aproksymacja funkcj

Post autor: maniekl2 »

Ja miałbym parę pytań. Jak z tą aproksymacją sobie poradziłeś ?
SmoQ
Użytkownik
Użytkownik
Posty: 7
Rejestracja: 5 paź 2010, o 23:39
Płeć: Mężczyzna
Lokalizacja: Łódź

[Ada 95] Operacje na punktach i plikach, aproksymacja funkcj

Post autor: SmoQ »

a kiedy masz zaliczenie? Ehh?
ziomal601
Użytkownik
Użytkownik
Posty: 9
Rejestracja: 2 paź 2007, o 17:27
Płeć: Mężczyzna
Lokalizacja: Łódź

[Ada 95] Operacje na punktach i plikach, aproksymacja funkcj

Post autor: ziomal601 »

No więc dzisiaj zaliczyłem więc mogę podać kod... jest w nim kilka błędów ale może inni poprawią...

UWAGA daje koncepcje jak to zrobić...

część pierwsza :



WITH Ada.Text_IO; USE Ada.Text_IO;
WITH Ada.Float_Text_IO; USE Ada.Float_Text_IO;
with ada.Integer_Text_IO; use ada.Integer_Text_IO;
package body sort is


-- przeciazanie dodawania
function "+" (Point_1, Point_2 : Punkty) return Punkty is

Point_3:Punkty;

begin

--suma X
Point_3.x := Point_1.x + Point_2.x;

--suma y
Point_3.y :=Point_1.y + Point_2.y;

--zwracam sume
return Point_3;

end "+";

--przeciazenie odejmowania
function "-" (Point_1, Point_2 : Punkty) return Punkty is

Point_3:Punkty;

begin

--odejmowanie X
Point_3.x := Point_1.x - Point_2.x;

--odejmowanie y
Point_3.y :=Point_1.y - Point_2.y;

--zwracam różnice
return Point_3;

end "-";

--przeciazenei porownania
function "=" (Point_1, Point_2 : Punkty) return Boolean is

begin
--porównuje punkty X-owe
if Point_1.X = Point_2.X then
return True;
else
return False;
end if;

--porównuje punkty Y-owe
if Point_1.Y = Point_2.Y then
return True;
else
return False;
end if;


end "=";

--przeciazanie put-a
procedure put (Point : in Punkty) is

begin
--wyswietlanie w postaci x;y;
Put(Point.x );
Put(';');
Put(Point.y);

end put;


procedure Get(Point: out Punkty) is
tab:string(1..100); --zmienna przechowujaca liczby w postaci x;y
max_a:integer;--max dlugosc stringa, ktory wpisuje
temp_one_x:String(1..100); -- zmienna tymczasowa potzreba do konwersji String-->Float
temp_one_y:String (1..100); -- zmienna tymczasowa potzreba do konwersji String-->Float
count_one_ix:integer:=1; -- zmienna pomocnicza przy konwersij
i,j:integer:=1; -- zmienne potrzebne do petli
a_i,b_i:integer:=0; -- zmienne zliczajace dlogosc X i Y;
dem:Punkty;--zmienna przechowujaca zmienne X i Y
begin

--ponieram stringa w postaci x;y
Get_Line(tab, max_a);




begin

--zaczynam konwersje strig --> Float
while i < max_a loop
temp_one_x(i):=tab(i);--przypisuje x do zmiennej tymczasowej
i:=i+1;
a_i:=a_i+1; -- licze dlugosc x
count_one_ix:=count_one_ix+1;
if tab(i) = ';' then --wyrzucam ";"

while j <=(max_a-count_one_ix) loop
i:=i+1;
temp_one_y(j):=tab(i); -- przypisuje y do zmiennej tymaczsowej
b_i:=b_i+1;--licze dlugosc y
j:=j+1;
end loop;


end if;

end loop;

end;

-- konwertuje na float z i y
dem.X:=Float'value(temp_one_x(1 .. a_i));
dem.Y:=Float'value(temp_one_y(1 .. b_i));

--koncze przeciazenie get-a
Point := dem;



end Get;

-- Trzy punkty
function Threepoint (par:float) return Float is

A,B,C:Punkty;--Trzy punkty w postaci x;y
Z,X:Float;-- parametry a ib

begin
-- pobieram punkty wykorzystujac przeciazenie get-a
Put("podaj piewrszy punkt w postaci x;y ");
Get(A); new_line;
Put("podaj drugi punkt w postaci x;y ");
Get(B); new_line;
Put("podaj trzeci punkt w postaci x;y ");
Get(C); new_line;


if (B.X - A.X)=0.0 then --sprawczym czy funkcja bedzie miala postac x=

Put("Funkcja bedzie prosta o rownaiu x= ") ;
Put(A.X);

else--jesli nie

Z:=((B.Y- A.Y) / (B.X - A.X));--wyliczam parametr a
X:= A.Y- (Z * A.X); -- wyliczam parametr b


if Z=0.0 then -- sprawdzam czy przypadkiem rówanie nie bedzie w postaci y=b

Put("Funkcja jest stala i wynosi y= ");
Put(X);

else --jesli nie wypisuje postac funkcji

New_Line;
Put("prosta ma posta y=");
Put(Z);
Put( "x + ");
Put(X);
New_Line;

if C.Y=((z * C.X)+X) then --sprawdzam czy trzeci punkt nalezy do prostej

Put("punkt trzeci nalezy");

else -- jesli nie

Put("punkt trzeci nie nalezy na prostej");


end if;
end if;
end if;
--zwracam zmienna wywolujaca
return par;

end Threepoint;


FUNCTION Sorts (so: integer; si:FileData) RETURN Valuesarray IS

i,j:integer:=0;
X,Y:float;
TempFile :FileData;

BEGIN
TempFile.Count:=so; --przypisuje pobrane dane
TempFile.data:=si.Data;--przypisuje pobrane dane

--sortuje dane wzgledem pierwszych wsporzednych
while i<=TempFile.Count loop
I:=I+1;

J:=1;
new_line;
WHILE (J<=TempFile.Count) LOOP



if TempFile.Data(j).x>TempFile.Data(j+1).x then
x:=TempFile.Data(j).x;
TempFile.Data(j).x:=TempFile.Data(j+1).x;
TempFile.Data(j+1).x:=x;
y:=TempFile.Data(j).Y;
TempFile.Data(j).Y:=TempFile.Data(j+1).Y;
TempFile.Data(j+1).Y:=y;

elsif TempFile.Data(j).x=TempFile.Data(j+1).x then

if TempFile.Data(j).Y>TempFile.Data(j+1).Y then
x:=TempFile.Data(j).x;
TempFile.Data(j).x:=TempFile.Data(j+1).x;
TempFile.Data(j+1).x:=x;
y:=TempFile.Data(j).Y;
TempFile.Data(j).Y:=TempFile.Data(j+1).Y;
TempFile.Data(j+1).Y:=y;
end if;

END IF;
J:=J+1;
end loop;

end loop;



--zwaracam sortowanie

return TempFile.Data;

END Sorts;



end sort;

Pozdrawiam :)
maniekl2
Użytkownik
Użytkownik
Posty: 3
Rejestracja: 24 paź 2011, o 20:54
Płeć: Mężczyzna
Lokalizacja: Zgierz

[Ada 95] Operacje na punktach i plikach, aproksymacja funkcj

Post autor: maniekl2 »

A powiedz, jak wygląda samo zaliczenie ?
Są jakieś dodatkowe zadania, pytania ?
No i pochwal się wynikiem
ODPOWIEDZ