Programiranje v Pascalu

Zanima me...
timj010
Prispevkov: 30
Pridružen: 31.3.2005 19:17
Kraj: Maribor
Kontakt:

Programiranje v Pascalu

Odgovor Napisal/-a timj010 »

Odlocil sem se, da se bom naucil porgramirati za zacetek sem si izbral pascal, ker je najlazji 8) ter najbolj logicen. No da preidem k bistvu spisal sem enostaven program za racunanje tock in risanje grafov linearnih funkcij.Imam pa eno vprasanje: graf ki se narise se prilagodi locljivosti monitorja v mojem primeru 1024*768, in potem recimo imam izracunano niclo funkcije M(0,3) in potem mi se izracuna se eno tocko vse lepo in prav... problem se pa pojavi ko mi narise na grafu daljico namesto premice in potem ce je druga tocka npr. A(2,6) dobim daljico ko jo komaj vidim saj je dolga le par pikslov, obstaja kaksen ukaz ki ne bi narisal crte ampak premico?
Tukaj si lahko downloadate exe file.
Tukaj pa si lahko downloadate source kodo.

Hvala

Uporabniški avatar
GJ
Prispevkov: 2635
Pridružen: 27.1.2003 22:08

Re: Programiranje v Pascalu

Odgovor Napisal/-a GJ »

timj010 napisal/-a:Odlocil sem se, da se bom naucil porgramirati..
Koliko si star?
timj010 napisal/-a: ..obstaja kaksen ukaz ki ne bi narisal crte ampak premico?
Kaj pa če bi probal z..

Koda: Izberi vse

  MoveTo(x, y);
  LineTo(x, y);
PS:
Predpostavljam, da hočeš narediti aplikacijo pod DOS WIN32.
Pa vsaj povej ker prevajalnik uporabljaš. Pascal je zelo širok..
Na splošno vsi programski jeziki kličejo API (application paralel interface) preko svojih unitov. Microsoft WIN32 API ukazi so javno dostopni na MSDN strani.
Od ostalih operacijskih sistemov pa tut. :lol:

Lahko noč..

azi
Prispevkov: 74
Pridružen: 23.10.2005 14:07

Odgovor Napisal/-a azi »

Nevmesno, ampak vseeno :

Pascal is sick.. Zakaj raje C-ja ne ucis ?

timj010
Prispevkov: 30
Pridružen: 31.3.2005 19:17
Kraj: Maribor
Kontakt:

Re: Programiranje v Pascalu

Odgovor Napisal/-a timj010 »

GJ napisal/-a: Koliko si star?
Star sem 14 let.
GJ napisal/-a: PS:
Predpostavljam, da hočeš narediti aplikacijo pod DOS WIN32.
Pa vsaj povej ker prevajalnik uporabljaš. Pascal je zelo širok..
Na splošno vsi programski jeziki kličejo API (application paralel interface) preko svojih unitov. Microsoft WIN32 API ukazi so javno dostopni na MSDN strani.
Od ostalih operacijskih sistemov pa tut. :lol:

Lahko noč..
Z prevajalnik uporabljam FPC (Free Pascal) in ja aplikacijo hocem naredit pod DOS WIN32, bom probal ta ukaz pa ti povem kako se obnese. Kaj si lahko prosim ogledas source kodo pa mi poves ce je lazji nacit risanja grafov funkcij, kot pa vsi ti if loopi :oops: ?
azi napisal/-a:Nevmesno, ampak vseeno :

Pascal is sick.. Zakaj raje C-ja ne ucis ?
Zaradi tega ker imamo tekmovanje na soli iz Pascala in bi rad dobil srebrno ali pa zlato priznanje, saj bi si tako lahko pridobil Zoizovo stipendijo. :wink: Pa ne razumem kaj je ta hudo narobe s Pascal? Sej sedaj se se malo ucim javascript (ce ga lahko stejemo med programske jezike).
LP

timj010
Prispevkov: 30
Pridružen: 31.3.2005 19:17
Kraj: Maribor
Kontakt:

Odgovor Napisal/-a timj010 »

Ne razumem kako naj bi s tem narisal premico

Koda: Izberi vse

  MoveTo(x, y);
  LineTo(x, y);
Primer recimo da mi program izracuna dve tocki skozi kateri poteka premica:
pa recimo dobim da je:
A(a,b)
B(c,d)
potem pa dam komendai
MoveTo(a,b);
LineTo(c,d);
potem bo se vedno samo daljica
Primer programa ki sem ga napisal

Koda: Izberi vse

program funkcije;

Uses
crt, Graph;

var
   Grdriver, Grmode: Integer;
   ch: char;
   y:  array[1..3] of real;
   x:  array[1..3] of real;
   r:  array[1..6] of integer;
   k, n: real;



begin

   ClrScr;
   Grdriver := 0;
   Grmode := 0;
   Writeln ('Vpisi vrednost -k in pritisni enter');
   Readln(k);
   Writeln ('Vpisi vrednost -n in pritisni enter');
   Readln(n);
   Writeln ('Za izhod iz programa pritisni ESC');
   Writeln;
   Writeln ('Created by JT.Br34k3r a.k.a T-man');
   Readln;

  y[1] := 0;
  x[2] := 0;
  x[3] := 20;

  x[1] := (y[1] - n) / k;
  y[2] := k * x[2] + n;
  y[3] := k * x[3];

      r[1] := Round(x[1]);
      r[2] := Round(x[2]);
      r[3] := Round(y[1]);
      r[4] := Round(y[2]);
      r[5] := Round(x[3]);
      r[6] := Round(y[3]);

   Writeln ('Tocka M(',r[2],',',r[4],')');
   Writeln ('Tocka N(',r[1],',',r[3],')');
   Writeln ('Tocka A(',r[5],',',r[6],')');
   Readln;

    InitGraph (Grdriver, Grmode, '');

   If Graphresult <> 0 then
      begin
      Writeln (' Error ');
      Halt (0);
      end;

   line (512,0,512,768);
   line (0,384,1024,384);

   if (r[1]>512) or (r[3]>512) or (r[2]>384) or (r[4]>384) then
   begin
   Writeln ('Tocka ima previsoko vrednost');
   Halt(0);
   end;

   if (r[2]>0) and (r[4]>0) then
   line (r[1] + 512,384 - r[2],r[3] + 512,384 - r[4])
   else line (r[1] + 512,384 + r[2],r[3] + 512,384 + r[4]);
   if (n=0) and (r[6]>0) then
   line (r[5] + 512,384 - r[6],512,384);
   if (n=0) and (r[6]<=0) then
   line (r[5] + 512,384 + r[6],512,384);

     Repeat
     ch := Readkey
     Until ch = #27;
     Closegraph;

Uporabniški avatar
Aniviller
Prispevkov: 7263
Pridružen: 15.11.2004 18:16

Odgovor Napisal/-a Aniviller »

Ne mores pricakovati da ti bo premico narisal sam(definiraj premico...). Ce ves sirino in visino okna, moras sam izracunati presecisci z okvirjem, naloga pa ima vec primerov (katere stranice seka,...)
Ce te ne moti grdost sledecega koraka, naredi takole:
MoveTo(-w/2,-k*w/2+n);
LineTo(w/2,k*w/2+n);

Ta koda ti zagotovo narise celotno crto, kolikor je pride v zaslon (w=width)

Ce imas katerokoli drugo funkcijo pa razdelis interval (-w/2,w/2) na vec delov (kolikor je zeljena natancnost) in delas po delih.
max: int;
x: Array[1..max] of real;
y: Array[1..max] of real;
i: int;
....bla bla
MoveTo(x[0],y[0]);
for i=1 to max do
begin
MoveTo(x,y);
LineTo(x,y);
end;

Uporabniški avatar
GJ
Prispevkov: 2635
Pridružen: 27.1.2003 22:08

Re: Programiranje v Pascalu

Odgovor Napisal/-a GJ »

timj010 napisal/-a:Z prevajalnik uporabljam FPC (Free Pascal) in ja aplikacijo hocem naredit pod DOS WIN32.
FPC je za šolske primerčke čisto uredu. Za kaj bolj zahtevnega pa si raje omisli Delphi, ni primerjave. :roll:
Obstaja tudi zelo dober slovenski forum na temo programiranja v Delphiju.

Slika

Link: http://www.delphi-si.com/index.php

timj010 napisal/-a: Kaj si lahko prosim ogledas source kodo pa mi poves ce je lazji nacit risanja grafov funkcij, kot pa vsi ti if loopi :oops: ?
Jaa, hm..

Način izrisovanja si malo zakompliciral ampak za začetek je kar uredu. :D

Normalno naj bi algoritem izgledal nekako takole..

1)Določiš delovno površino (x,y), recimo velikosti 512 * 512 pik, ki ti predstavlja tvoje okno.
2)Določiš faktorje za x os in y os (ponavadi sta enaka).
3)Določiš kordinatno izhodišče.
4)Izračunaš v katerih dveh točkah ti premica seka delovno površino, nakar jo izrišeš.

PS: Bistvo je torej, da napišeš preprosto funkcijo, ki računske točke grafa pretvori v grafične pixle tvoje delovne površine.

Lep dan želim in veliko veselja v programiranju..

Roman
Prispevkov: 6375
Pridružen: 21.10.2003 8:03

Odgovor Napisal/-a Roman »

Samo mimogrede: na računalniški zaslon lahko rišeš samo daljice, za premice je kajpak premajhen. Kar želiš, je najbrž to, da bi rad daljico, ki je znotraj zaslona, potegnil do roba. Malo se pojdi analitično geometrijo, poišči presečišče premice z levim in desnim robom zaslona (velikost zaslona imej obvezno v dveh spremenljivkah, recimo mx in my), in če pade katerokoli presečišče izven zaslona, moraš poiskati še, kje seka zgornji ali spodnji rob. Ker imaš lahko pri tej metodi težave s preveč strmimi premicami, lahko premice s k>1 rešuješ obrnjeno (zamenjaš x in y).

Roman
Prispevkov: 6375
Pridružen: 21.10.2003 8:03

Odgovor Napisal/-a Roman »

Saj res, zakaj bi bil C boljši od Pascala?

AlexUS
Prispevkov: 134
Pridružen: 25.3.2005 14:50
Kontakt:

Odgovor Napisal/-a AlexUS »

C++ je definitivno boljši od Pascala.
Pascal je namanjen le razumevanju programiranja. Uporabljal se je pred leti ko so bile še DOS aplikacije.
Uporaba je podobna, le nove ukaze se je treba naučiti. Če ti Pascal ni delal preglavic ti tudi C ne bo.
Drugače lahko uporabiš Borland C ali pa od Microsofta Visual Studio.

azi
Prispevkov: 74
Pridružen: 23.10.2005 14:07

Odgovor Napisal/-a azi »

Roman napisal/-a:Saj res, zakaj bi bil C boljši od Pascala?
Nebi rad zacel flamewara, ker itak tudi drugace vsi vemo, da se v vsakem programskem jeziku da "vse" narest, osebno mi pa Pascal iz vec razlogov NI vsec (grda koda, omejitve........).

Tema je namenjena problemom timj010-ja, in nebi rad moril z mojim mnenjem o pascalu, lahko si pa preberes tekst Briana W. Kernighan-a ("Why Pascal is Not My Favorite Programming Language"):

http://www.lysator.liu.se/c/bwk-on-pascal.html

Uporabniški avatar
GJ
Prispevkov: 2635
Pridružen: 27.1.2003 22:08

Odgovor Napisal/-a GJ »

azi napisal/-a:.. lahko si pa preberes tekst Briana W. Kernighan-a ("Why Pascal is Not My Favorite Programming Language"):
Pa ti nisi resen azi.. :oops:

Brian je ta članek napisal leta 1981..
Med tem časom pa se je pascal zelo, zelo razvil in omenjeni problemi so zgodovina. :!: Tko da..

Pascal danes ne zaostaja skoraj nič za C-jem. Za navadne smrtnike (ne programerje) pa je pascal mnogo preglednejši in razumljivejši.

Razlog zakaj je C med programerji tako priljubljen?
C je bil dolgo časa prvi in edini standardizirani programski jezik! Kar pomeni, da lahko C programsko kodo seliš iz ene platforme na drugo brez večjih problemov.


Lep večer želim..

Roman
Prispevkov: 6375
Pridružen: 21.10.2003 8:03

Odgovor Napisal/-a Roman »

azi napisal/-a:...osebno mi pa Pascal iz vec razlogov NI vsec (grda koda, omejitve........).
No, osebne razloge lahko razumem, a ne odgovorijo na moje vprašanje. In v vsakem programskem jeziku se da pisati nagravžno grdo. Omejitve? Je C brez njih? No, o okusih se najbrž res ne smemo prepirati.

AlexUS
Prispevkov: 134
Pridružen: 25.3.2005 14:50
Kontakt:

Odgovor Napisal/-a AlexUS »

...si predstavljate windowse napisane v Pascalu...

No res se nekdo navadi na nekatere stvari eni pa na druge, rekel bi pa da sem sam osebno uporabljal Pascal pred leti(v šoli).
Tako da sploh ne vem če bi delal Pascal v windows Xp, nasplošno pa so DOSove aplikacije že izven mode(no nekateri jih še vedno uporabljajo kot računovodske programe).

Kot sem že prej rekel, je Pascal namenjen razumevanju programeranja ali "začetniški" program.
Seveda se da v njem narediti marsikaj, vendra se v C++ da narediti iste stvari veliko lažje, boljše, ter bolj pregledne. Poleg tega pride v poštev tudi implementacija drugih kod(grafičnih, programskih, podatkovnih baz...) katere vključimo v sam program(ali projek).

Pascal vs. C++ = Pascal < C++
Zakaj pa morda prihodnjič.

azi
Prispevkov: 74
Pridružen: 23.10.2005 14:07

Odgovor Napisal/-a azi »

GJ napisal/-a: Pascal danes ne zaostaja skoraj nič za C-jem. Za navadne smrtnike (ne programerje) pa je pascal mnogo preglednejši in razumljivejši.
Se nebi strinjal :oops:

Pascal nima VLA-jev, struct initializerjev, kazalcne aritmetike, med drugim ima C se (kar nevem ce pascal podpira) :

-Variable Argument List za funkcije,
- Vsak char predstavlja (castan v integer) ASCII vrednost (no more ord() , chr() crap),
- preprocesorske direktive (#define,#ifdef, #pragma....),
- v pascalu smes za for loope uporabljat samo "smiselne" spremenljivke, prav tako nesmes manipulirati krmilne spremenjivke v samem loopu (vsaj v fpc-ju),
- izredno zmogljiv casting,
-.....

Glede preglednosti je pa dokaj relativno in pustim usakemu posebej presojo.. Bi pa pripomnil , da je preglednost pri vecjih projektih gotovo slabsa v pascalu - pa pustimo vsakemu svoje mnenje....
GJ napisal/-a: Razlog zakaj je C med programerji tako priljubljen?
C je bil dolgo časa prvi in edini standardizirani programski jezik! Kar pomeni, da lahko C programsko kodo seliš iz ene platforme na drugo brez večjih problemov.


Dvomim da so se Unix-asi zanimali za portabilnost v 70-80 letih ;-) Pa tudi pisci operacijskih sistemov (predsem Microsoftovi) bi pomojem uporabljali pascal, ce bi slo tukaj le za portabilnostne razloge ;)

Odgovori