Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

[Turbo Pascal] Prosta grafika

soulhudson 31 Maj 2010 21:31 5112 12
  • #1 31 Maj 2010 21:31
    soulhudson
    Poziom 12  

    Muszę zrobić na informatykę domek w TP, o określonej długości ścian.
    Poszukałem w necie i wydaje się proste, ale gdy wrzucam do kompilatora kody z neta, które rzekomo działają to albo mam Error 200, albo nic się nie dzieje.
    I nie wiem jak mam się teraz za to zabrać.
    Poproszę o kod, który rysuje prostokąt (może być wypełniony), który u was, działa, albo o linki do 'zaufanych' kompilatorów
    Pozdrawiam

    0 12
  • #3 01 Cze 2010 14:55
    soulhudson
    Poziom 12  

    Nic nie pogło, może jak wrzucę cały kod to może coś znajdziesz...

    0
  • #4 01 Cze 2010 15:10
    arnoldziq
    Moderator Programowanie

    Dawaj ten kod, zobaczymy co się tam dzieje.

    0
  • #5 01 Cze 2010 15:19
    soulhudson
    Poziom 12  

    Tak właściwie to nie wiem jak się za to zabrać, narysowałem sobie domek i teraz nie wiem, od czego zacząć, tym bardziej że mój kompilator wyświetla error 200 nawet przy rysowaniu pojedynczego pikxela (a próbowałem już kilku)
    To obrazek z danymi:
    [Turbo Pascal] Prosta grafika

    0
  • #6 01 Cze 2010 15:24
    arnoldziq
    Moderator Programowanie

    Daj ten nie działający kod, zobaczymy co tam jest źle ... ale Error 200 , to raczej będzie to co jest opisane e w/w poście.

    0
  • #7 01 Cze 2010 20:43
    soulhudson
    Poziom 12  

    Nie mam kodu, bo sprawdzałem kody z neta i żaden nie działał, ale jutro się tym pobawie, mam już mniej więcej pomysł jak to zrobić

    0
  • #8 02 Cze 2010 16:59
    wrych
    Poziom 20  

    Zamiast podawać długości boków, oblicz współrzędne wierzchołków. Lewy górny róg ekranu, to wspx = 0 i wspy = 0. W Turbo Pascalu rozmiary ekranu: 640x480 (współrzędne od 0 do 639 i od 0 do 479).
    Mogę pomóc więcej, ale chciałbym wiedzieć czy zadanie jest na 2, 3, 4, 5 a może śni się 6 na koniec roku!!!

    0
  • #9 02 Cze 2010 18:23
    soulhudson
    Poziom 12  

    No to mam taki kod:

    Code:
    program domek;
    
    uses crt, graph;

    var
    x,a,h,c,d,f,g,i,e,p,j,k:integer;
    vga,vgahi:integer;

    const
    b:integer=320;
    z:integer=0;

    begin
    write('Podaj dlogosc boku a (1 = 10 pxl.): ');
    readln(x);
    vga:=vga;
    vgahi:=vgahi;
    initgraph(vga,vgahi,'BGI');
    a:=x*10;
    c:=(645-(6*a))/2;
    d:=c+(6*a);
    e:=c+(2*a)+((1/2)*a);
    f:=h+a;
    g:=e+a;
    p:=6*a;
    j:=(6*a)*(6*a);
    k:=(3*a)*(3*a);
    h:=sqrt(j-k);
    i:=g+a;
    setcolor(4);
    line(b,z,c,h);{Lewe ramie trójkąta}
    line(b,z,d,h);{Prawe ramie trójkąta}
    line(c,h,d,h);{Podstawa}
    setcolor(6);
    line (e,h,e,f);{Lewy bok kwadratu}
    line (g,h,g,f);{Prawy bok kwadratu}
    line (g,f,i,f);{Podstawa kwadratu}
    writeln('Dostane 6??? :-)');
    readln;
    end.



    I teraz mam problem, gdyż współrzędne muszą być podawane w integer, a ja potrzebuję wykonać obliczenia w real. Próbowałem je przerzucić np. a:=aa
    przy czym a jest w integer a aa w real, ale się niestety nie da.
    Muszę to mieć na poniedziałek, więc proszę o szybką pomoc, i sam nadal będę wpróbował

    0
  • #10 02 Cze 2010 18:30
    arnoldziq
    Moderator Programowanie

    Użyj round albo trunc do zamiany real na int.

    0
  • #11 02 Cze 2010 18:39
    soulhudson
    Poziom 12  

    Dzięki wielkie!
    Ale teraz mam znów ten sam problem co z innymi kodami
    Po zkompilowaniu tego kodu:

    Code:
    program domek;
    
    uses crt, graph;

    var
    x,a,h,c,d,f,g,i,e,p,j,k:integer;
    cc,ee,hh:real;
    vga,vgahi:integer;

    const
    b:integer=320;
    z:integer=0;

    begin
    write('Podaj dlogosc boku a (1 = 10 pxl.): ');
    readln(x);
    vga:=vga;
    vgahi:=vgahi;
    initgraph(vga,vgahi,'BGI');
    a:=x*10;
    cc:=(645-(6*a))/2;
    c:=round(cc);
    d:=c+(6*a);
    ee:=c+(2*a)+((1/2)*a);
    e:=round(ee);
    f:=h+a;
    g:=e+a;
    p:=6*a;
    j:=(6*a)*(6*a);
    k:=(3*a)*(3*a);
    hh:=sqrt(j-k);
    h:=round(hh);
    i:=g+a;
    setcolor(4);
    line(b,z,c,h);{Lewe ramie trójkąta}
    line(b,z,d,h);{Prawe ramie trójkąta}
    line(c,h,d,h);{Podstawa}
    setcolor(6);
    line (e,h,e,f);{Lewy bok kwadratu}
    line (g,h,g,f);{Prawy bok kwadratu}
    line (g,f,i,f);{Podstawa kwadratu}
    writeln('Dostane 6??? :-)');
    readln;
    end.

    Wyskakuje mi błąd 200, i aplikacja się wyłącza
    Może mieć na to wpływ że mam winsowsa xp home edition?
    Gdyby ktoś mógł zkompilować u siebie i zobaczyć czy działa, a jeżeli u was zadziała to wysłanie mi aplikacji - był bym wdzięczny...

    Dodano po 8 [minuty]:

    Kiedy włączam aplikacje wyświetla się błąd Runtime error 200 at 036E:0091. i szybko znika, aby go odczytać musiałem złapać okienko print screanem

    0
  • Pomocny post
    #12 02 Cze 2010 18:47
    wrych
    Poziom 20  

    Obiecałem pomóc... słowo się rzekło...
    1) Linię programu

    Code:
    c:=(645-(6*a))/2;

    zastąp linią
    Code:
    c:=(645-(6*a)) div 2
    ;
    i koniecznie poczytaj o typach zmiennych liczbowych i dzieleniu całkowitym.
    2) Natomiast linię
    Code:
    e:=c+(2*a)+((1/2)*a); 

    zastąp linią
    Code:
    e:=c+(2*a)+a div 2); 

    3) Ponadto w linii
    Code:
    h:=sqrt(j-k);

    dokonaj konwersji typów danych (poczytaj o funkcji Round)
    Code:
    h:=round(sqrt(j-k));

    4) Usuń z linii
    Code:
    uses crt, graph;

    crt i przecinek... i tak nie korzystasz z żadnej funkcji modułu CRT, a to jest zapewne przyczyna błędu "Error 200".

    Po takich zabiegach program u mnie skompilował się (TP 7.0). Narysowany domek jest trochę inny od Twojego projektu.

    Jeśli pomogłem to ładnie podziękuj ... lub proś o dalsze rady. Według mnie na 6 chyba jednak nie zasługujesz, ale staraj się.

    1
  • #13 02 Cze 2010 19:24
    soulhudson
    Poziom 12  

    Dzięki wielkie
    Dużo + dla ciebie, działa!!!

    0