Obliczanie pól figur

2012-01-19 15:45
0

Otóż dopiero się uczę pisać w pascalu ; ) Z góry przepraszam jeśli zaśmiecam forum, lecz wolę wiedzieć dlaczego tak jest, a nie inaczej.

Otóż chodzi o to:
Aplikacja oblicza pole 3 figur, które zaprogramowałem.
Podaję ID figury, wprowadzam dane i wyświetla się wynik, aczkolwiek podany wynik nie ignoruje "kropki" oraz wygląda to tak: 1.50000000+E00 (powinno wyjść w wyniku TYLKO 15.)

A więc, po co te zera i "E" i dlaczego kropka "nie przesuwa" się ?

Czy mogę jakoś zmodyfikować kod, aby było, tak jak być powinno ? : ))

program Figury;

var 
    figura: integer;
    z1,z2,z3,pole: real;

BEGIN
    writeln('Podaj rodzaj figury');
    writeln('1 kwadrat, 2 - trojkat, 3 - trapez');
    read(figura);

    case figura of
        1: begin
            writeln('Podaj bok kwadratu');
            read(z1);
            pole :=z1 * z1;
            writeln('Pole kwadratu wonosi: ',pole)
           end;
        2: begin
            writeln('Podaj podstawe i wysokosc');
            read(z1,z2);
            pole := (z1 * z2)/2;
            writeln('Pole trojkata wynosi: ', pole)
           end;
        3: begin
            writeln('Podaj podstawy i wysokosc trapezu');
            read(z1,z2,z3);
            pole := ((z1 + z2)/2) / z3;
            writeln('Pole trapezu wynosi: ', pole)
           end;
    else
        writeln('Blad danych')
    end;
readln;
readln; 
END.

PS: Uczę się z książki Nauka Programowania Dla Początkujących Turbo Pascal (Anna Struzińska-Walczak & Krzysztof
Walczak).

edytowany 1x, ostatnio: madmike, 2012-01-19 15:46

Pozostało 580 znaków

2012-01-19 15:56
0

E to po prostu błąd i nie da się wyświetlić dalej tylu cyfr. Może użyj zamiast real typu single?


Co kurła debuguj ten kod i streszczaj się klientowi chce się fixa, a jak nie kurła to odpale visuala i ci pomoge a tego byś nie chciał
Jasne, E od Error. A o postaci wykładniczej liczb nigdy nie słyszałeś? - pelsta 2012-01-19 23:04

Pozostało 580 znaków

2012-01-19 16:00
0

Nauka Programowania Dla Początkujących Turbo Pascal

Turbo Pascal?
Kup jakąś aktualną książkę, a w każdym razie używaj Free Pascala.


Pozostało 580 znaków

2012-01-19 16:15
0
writeln('Pole kwadratu wonosi: ', pole: 0: 0)

Dla wartości z1 = 15, wyświetli 225.

writeln('Pole kwadratu wonosi: ', pole: 0: 2)

Dla wartości z1 = 15, wyświetli 225.00.

writeln('Pole kwadratu wonosi: ', pole)

Dla wartości z1 = 15, wyświetli 2.25000000000000E+0002.

wzór:
liczba_rzeczywista : liczba_cyfr_ogółem : liczba_cyfr_po_przecinku

Poza tym możesz użyć różnych funkcji typu: Round(), Trunc(), Int(), Frac(). O ile są one w TP.

Precyzja zmiennych (liczba cyfr znaczących):

Single:    7
Real:     15
Double:   15
Extended: 19

Moonless Sky
Becoming the Getsuga itself.
edytowany 5x, ostatnio: Szarp, 2012-01-19 16:35

Pozostało 580 znaków

2012-01-19 16:46
0
Szarp napisał(a)
writeln('Pole kwadratu wonosi: ', pole: 0: 0)

Dla wartości z1 = 15, wyświetli 225.

writeln('Pole kwadratu wonosi: ', pole: 0: 2)

Dla wartości z1 = 15, wyświetli 225.00.

writeln('Pole kwadratu wonosi: ', pole)

Dla wartości z1 = 15, wyświetli 2.25000000000000E+0002.

wzór:
liczba_rzeczywista : liczba_cyfr_ogółem : liczba_cyfr_po_przecinku

Poza tym możesz użyć różnych funkcji typu: Round(), Trunc(), Int(), Frac(). O ile są one w TP.

Precyzja zmiennych (liczba cyfr znaczących):

Single:    7
Real:     15
Double:   15
Extended: 19

pole: 0: 0 | pole: 0: 2 | pole
Co to daje ? Jakiś stosunek czy jak ? :)
Przepraszam, ale dopiero zaczynam przygodę z programowaniem, a Pascal nauczy mnie dobrych nawyków, i nie za bardzo to rozumiem, mogę prosić o wyjaśnienie ?? ; )

Pozostało 580 znaków

2012-01-19 16:51
0

Nie, to nie stosunek, pamiętaj nie zawsze to co piszemy w języku programowania przekłada się na "logikę" czy to co uczymy się na matematyce itd. Pascal ma po prostu taką składnię. Przy typie real, możemy zapisać właśnie takie argumenty, które definiują "zachowanie" tego typu.


Co kurła debuguj ten kod i streszczaj się klientowi chce się fixa, a jak nie kurła to odpale visuala i ci pomoge a tego byś nie chciał

Pozostało 580 znaków

2012-01-19 17:00
0
xeo545x39 napisał(a)

Nie, to nie stosunek, pamiętaj nie zawsze to co piszemy w języku programowania przekłada się na "logikę" czy to co uczymy się na matematyce itd. Pascal ma po prostu taką składnię. Przy typie real, możemy zapisać właśnie takie argumenty, które definiują "zachowanie" tego typu.

No dobrze ; )
To może tak: Co zmienia w programie " 0: 2" ?? Co powoduje. Bo jak tego nie dodam w kodzie, np. przy kwadracie, to pokazuje sam wynik, ale jak w trójkącie to tak jak było. ;)

Pozostało 580 znaków

2012-01-19 17:06

To takie jakby zaokrąglanie. Lewa strona to liczby przed przecinkiem, a prawa strona to liczby po przecinku - np. 0: 2 - 0 nie zmienia niczego, więc całości będą bez zmian, a 2 oznacza, że będą 2 liczby po przecinku, reszta zostanie usunięta.

liczba = 255,55555
liczba 0: 2 to bedzie 255,55

edytowany 1x, ostatnio: qeeepek, 2012-01-19 17:06

Pozostało 580 znaków

2012-01-19 17:10
0
qeeepek napisał(a)

To takie jakby zaokrąglanie. Lewa strona to liczby przed przecinkiem, a prawa strona to liczby po przecinku - np. 0: 2 - 0 nie zmienia niczego, więc całości będą bez zmian, a 2 oznacza, że będą 2 liczby po przecinku, reszta zostanie usunięta.

liczba = 255,55555
liczba 0: 2 to bedzie 255,55

Dziękuje bardzo ;) W książce tego nie było. Aplikacja działa jak powinna ;)
Nawet kod napisałem ; D Trapez źle zapisałem.... hehe ^^ Ale grunt, że wiem o co chodzi ;)
Jeszcze raz dzięki.

Pozostało 580 znaków

2012-01-19 21:48
1
kostisx napisał(a)

1.50000000+E00 (powinno wyjść w wyniku TYLKO 15.)
A więc, po co te zera i "E" i dlaczego kropka "nie przesuwa" się ?
Czy mogę jakoś zmodyfikować kod, aby było, tak jak być powinno ? : ))

No właśnie. Program napisany w Pascalu domyślnie przedstawia liczby rzeczywiste jako liczby zmiennoprzecinkowe zapisane w notacji naukowej. Link do Wikipedii: http://pl.wikipedia.org/wiki/Notacja_naukowa Jednak autorowi nie podoba się taki zapis i wolałby, aby liczby rzeczywiste były przedstawiane w formacie stałoprzecinkowym, czyli "aby było tak, jak być powinno". Oczywiście jest na to rada, o czym pisali już poprzednicy, ale...
... zacznijmy od początku.

Procedury standardowe Writeln i Write służą do wyprowadzania wyników na ekran (ale też np. na drukarkę). Można te procedury zapisać w jednej z poniższych postaci:

Writeln(Wyrażenie)
Writeln(Wyrażenie:Długość)
Writeln(Wyrażenie:Długość:MiejscaDziesiętne)

Cytat z dobrej książki do Pascala, w której to było ;)

Wyrażenie powinno być typu znakowego (Char), całkowitego (Byte, ShortInt, Integer, Word, LongInt), rzeczywistego (Real, Comp, Single, Double, Extended), łańcuchowego (string) lub łańcuchowego spakowanego (array of Char). W szczególnym przypadku wyrażenie może być literałem lub zmienną.

Parametr Długość określa minimalną długość pola wyjściowego i powinien być wyrażeniem typu całkowitego o wartości większej od zera. Jeżeli do wyprowadzenia wyrażenia wyjściowego potrzeba większego pola niż to określa parametr Długość, to wyprowadzana jest taka liczba znaków, jaka jest niezbędna do przedstawienia tego wyrażenia.

Parametr MiejscaDziesiętne określa liczbę miejsc dziesiętnych po kropce w stałoprzecinkowym przedstawieniu wartości typu rzeczywistego i może zostać podany tylko dla typów rzeczywistych i tylko w przypadku, gdy podany jest także parametr Długość.

Tekst tekstem, ale nie ma to jak dobry przykład:

{Liczby rzeczywiste}
Writeln(27/32);            // Wynik:□8.43750000000000E-0001
Writeln(27/32:4);          // Wynik:□8.4E-0001
Writeln(27/32:12);         // Wynik:□8.438E-0001
Writeln(27/32:30);         // Wynik:□□□□□8.43750000000000000E-0001
Writeln(27/32:3:3);        // Wynik:0.844
Writeln(27/32:5:5);        // Wynik:0.84375
Writeln(27/32:10:5);       // Wynik:□□□0.84375

{Można również łańcuchy!}
Writeln('Tekst');          // Wynik:Tekst
Writeln('Tekst':3);        // Wynik:Tekst
Writeln('Tekst':8);        // Wynik:□□□Tekst

Te kwadraciki □□□ oznaczają niewidoczny znak odstępu, czyli po prostu spację

PS. Pozwoliłem sobie napisać ten krótki tekst, bo po przeczytaniu całego wątku mam wrażenie, że nie do końca jest jasne co, jak i dlaczego. Może komuś się przyda.

Pozostało 580 znaków

Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0