Programiranje v Pascalu

Zanima me...
timj010
Posts: 30
Joined: 31.3.2005 19:17
Location: Maribor
Contact:

Programiranje v Pascalu

Post by timj010 » 5.1.2006 22:23

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

User avatar
GJ
Posts: 2635
Joined: 27.1.2003 22:08

Re: Programiranje v Pascalu

Post by GJ » 5.1.2006 23:11

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

Code: Select all

  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
Posts: 74
Joined: 23.10.2005 14:07

Post by azi » 6.1.2006 13:44

Nevmesno, ampak vseeno :

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

timj010
Posts: 30
Joined: 31.3.2005 19:17
Location: Maribor
Contact:

Re: Programiranje v Pascalu

Post by timj010 » 6.1.2006 13:48

GJ wrote: Koliko si star?
Star sem 14 let.
GJ wrote: 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 wrote: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
Posts: 30
Joined: 31.3.2005 19:17
Location: Maribor
Contact:

Post by timj010 » 6.1.2006 14:04

Ne razumem kako naj bi s tem narisal premico

Code: Select all

  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

Code: Select all

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;

User avatar
Aniviller
Posts: 7263
Joined: 15.11.2004 18:16

Post by Aniviller » 6.1.2006 14:37

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;

User avatar
GJ
Posts: 2635
Joined: 27.1.2003 22:08

Re: Programiranje v Pascalu

Post by GJ » 6.1.2006 14:53

timj010 wrote: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.

Image

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

timj010 wrote: 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
Posts: 6361
Joined: 21.10.2003 8:03

Post by Roman » 6.1.2006 14:56

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
Posts: 6361
Joined: 21.10.2003 8:03

Post by Roman » 6.1.2006 16:35

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

AlexUS
Posts: 134
Joined: 25.3.2005 14:50
Contact:

Post by AlexUS » 6.1.2006 17:54

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
Posts: 74
Joined: 23.10.2005 14:07

Post by azi » 6.1.2006 19:07

Roman wrote: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

User avatar
GJ
Posts: 2635
Joined: 27.1.2003 22:08

Post by GJ » 6.1.2006 19:34

azi wrote:.. 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
Posts: 6361
Joined: 21.10.2003 8:03

Post by Roman » 6.1.2006 19:55

azi wrote:...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
Posts: 134
Joined: 25.3.2005 14:50
Contact:

Post by AlexUS » 6.1.2006 21:41

...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
Posts: 74
Joined: 23.10.2005 14:07

Post by azi » 6.1.2006 22:04

GJ wrote: 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 wrote: 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 ;)

Post Reply