Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: Pascal ei oo pasca, djgpp on

Sivun loppuun

petterik [28.10.2004 19:02:35]

#

Vaihdoin Pascaliin

Sanokaa vaan, että djgpp:n asennus on helppoa, mutta ei ollut mulle. Latasin mitä http://www.delorie.com/djgpp/zip-picker.html käski ja unzippasin koneelle ja tein pathit.

Sen jälkeen olis pitäny kääntyä käskyllä
gcc oma.c -o oma.exe ,
mutta eihän mulla ollut koko gcc:tä tullut bin hakemistoon!?
jokin gxx oli mikä lie.

Pitääkö se gcc ohjelma siis erikseen jotenkin asentaa?
---------

No vaihdoin jo Pascaliin http://www.bloodshed.net/devpascal.html

Eikä kaduta yhtään. Täysin freeware, gui ympäristö editori, käännokset helppoja.

Pienen grafiikkaa tekevän ohjelman sain heti aikaiseksi.
http://koti.welho.com/pkeckman/temp/

ps.
http://www.makupalat.fi/teknika4.htm

tomaattigeeni [28.10.2004 20:53:06]

#

Pascal on ohjelmointikieli, DJGPP on C++ -kääntäjä. Eivät mitenkään verrattavissa.

Ja DJGPP on dos-kääntäjä, joka ei kovin olennaisena osana kuulu nykyaikaan. Tuolta bloodshed.net:stä löydät Dev-C++ -kääntäjän, joka on helppo asentaa ja nykyaikainen, kääntää samaa koodia kuin DJGPP.

petterik [28.10.2004 21:08:26]

#

No joo se oli dev-pascal (joka siis on pascal kääntäjä (free pascal) ja ympäristö), jonka sain asennettua helposti ja jolla oli mukava lähteä ohjelmoimaan.

Olkoon vaan djgpp pelkkä kääntäjä, mutta en saannut sitä asennettua kaiken vaivannöön jälkeen ollenkaan.

Että tietyn tyypinmuunnoksen jälkeen ovat verrattavissa.
---
Mutta siis että Samasta paikkaa näyttää löytyvän hyvä DevC++ kääntäjäkin? Kun olisin heti tiennyt! Ja äkkiä asentamaan, kokeilemaan...

Metabolix [28.10.2004 22:22:13]

#

Kommentoinpa ensin tuota ohjelmaa: jos et pikaisesti opettele sisentämään koodiasi selkeästi, niin voit joskus olla melkoisessa pulassa sen kanssa.

Sittenpä huomautetaan vielä, että viestisi on lievästi asiaton, eikä edes oikeastaan kuulu tänne. Jos olisit kysynyt neuvoa DJGPP:n asennukseen tai toisen kääntäjän löytämiseen, se olisi aivan eri asia, mutta haukkumisen saa tehdä muualla.

petterik [28.10.2004 23:56:37]

#

Koodissa oli jokaista beginniä vastaava end samassa kohdassa. Mitähän siinä sisennyksessä pahiten oli pielessä?

Olihan siellä ekassa viestissä kysymyskin, eli mistähän voisi johtua että DJGPP:n bin/ hakemistosta jäännyt jostain syystä koko gcc pois? Vaikka ei kiinnosta enää. Dev-C++:n asentaminen oli helppoa, mutta...
---
...ongelmat jatkuu. Paketissa ei ole tukea grafiikalle. graphics.h puuttuu.
Noiden ohjeiden: http://www.geocities.com/uniqueness_template/ seuraaminen ja winbgim.h asennus ei onnistu. Onko onnistunut muilta?
---
Eli jos kerran koen ongelmia C++ kielisten ohjelmointiympäristöjen asentamisen kanssa - en ole vielä saannut ensimmäistäkään grafiikkaa toimimaan - niin voin kai haukkua niitä (vaikka ilmaisia ovatkin) ja kehua Pascalia (tai siis sille löytyviä ohjelmointi/kääntäjä paketteja), kunnes saan C-ohjelmointi ympäristöt toimimaan.

Metabolix [29.10.2004 00:44:11]

#

Suosittelen grafiikan puolelta jotakin seuraavista:

Nuo eivät ole mitenkään paremmuusjärjestyksessä tai mitään, mutta kaksi ensimmäistä ovat ainakin helpompia kuin jälkimmäiset, ja jälkimmäiset ovatkin jo järeämpää luokkaa (vaikka kai sitä saa SDL:stäkin irti jos jonkinmoista ihmettä).

Se, että sinulla on ongelmia, ei ole mikään syy täyttää koko viestiä turhalla haukkumisella. Apuakin saa varmasti enemmän, jos hoitaa asiansa asiallisesti ilman turhaa raivoamista.

Tuosta DJGPP:stä veikkaisin, että et vain ole osannut ladata oikeita paketteja. Tulikohan ne C- ja C++-kääntäjä-kohdat rastitettua siitä listasta?

Kyllä tuo Pascal-koodisi on silti aika kammottavaa. Eniten siinä risoo tämä pätkä:

  if (error <> grOk) Then
    begin
    writeln('m800x600x256 is not supported!');
    halt(1) (* puolipiste puuttuu... ja miksei näitä ole sisennetty? *)
    end;
for i:=0 to 255 do  (* Miksi ihmeessä tämä ei ole samassa tasossa kuin edellinen if-lause? *)
  SetRGBPalette (i,0,0,5);

  tw:=getmaxx;
  th:=getmaxy;
c:=0; (* Miksi edelliset sisennykset häviävät tässä kohti? *)
x:=0;
y:=0;
for r:=0 to 255 do
begin

Tässäpä vielä tuo sama pätkä hieman siistittynä:

if (error <> grOk) then
begin
  Writeln('m800x600x256 is not supported!');
  Halt(1);
end;

for i := 0 to 255 do
  SetRGBPalette (i, 0, 0, 5);

tW := GetMaxX;
tH := GetMaxY;
C := 0;
X := 0;
Y := 0;

for R := 0 to 255 do
begin

petterik [29.10.2004 01:47:17]

#

Halt(1) ei tarvitse puolipistettä peräänsä.
Puoli piste _erottaa_ lauseita ei päätä niitä.
Kun ei tarvita, niin ei saa turhaan laittaa puolipistettä.

Olihan siellä tälläinenkin kohta ilman puolipistettä:
i:=i+1
end;

Jos kerran menee kääntäjästä läpi, niin miksi turhaa laittaa puolipisteitä perään? ;(väleihin kyllä aina)
---
Kiitos noista kolmikirjaimisista lyhenteistä. Täytyy joku päivä tutkia vaikka SDL:lää mikä sitten lieneekään.

Heikki [29.10.2004 02:13:48]

#

petterik kirjoitti:

Kiitos noista kolmikirjaimisista lyhenteistä. Täytyy joku päivä tutkia vaikka SDL:lää mikä sitten lieneekään.

SDL:n asentamiseen löytyy opas, ja jonkinlainen perusopassarja on ollut tekeillä jo jonkin aikaa.

petterik [29.10.2004 02:38:16]

#

Joo no SDL:n asennus oli helppoa Dev-C++:aan. Kiitos, täytyy tutkiskella sitä. Mutta näytti olevan vähän monimutkaisen näköistä pelkästään pisteen tulostaminen screenille. No, aliohjelmia vaan rakentamaan...

Eli taidan edelleen tyytyä Pascaliin kun tarkoituksena olisi vain "piirtää" kuva:

http://www.mrpbody33.com/archives/images/2003October/weird.jpg

Tai oikeastaan muutama tuollainen pikkasen eri kiertovaiheessa ja laittaa vaikka gif-animaatioon pyörimään ne. Siis kun toi kuva ei pyöri vaikka näyttää.

arcatan [29.10.2004 08:09:27]

#

if (error <> grOk) then
  begin
    Writeln('m800x600x256 is not supported!');
    Halt(1);
  end;
  {* miten niin tuo for olisi eri tasossa kuin if?
     ifhän päättyy tuohon endiin. *}

for i := 0 to 255 do
  SetRGBPalette (i, 0, 0, 5);

Metabolix [29.10.2004 10:09:53]

#

Tuo on samassa tasossa Putkan kooditagin takia. Katso alkuperäistä koodia.

Blaze [29.10.2004 10:12:38]

#

petterik kirjoitti:

Jos kerran menee kääntäjästä läpi, niin miksi turhaa laittaa puolipisteitä perään? ;(väleihin kyllä aina)

Siksi, että kun myöhemmin lisää loppuun yhden lauseen, ei tarvitse muistaa laittaa sen edellisen loppuun puolipistettä, kun se on siellä valmiina.

petterik [29.10.2004 11:41:43]

#

Tarvitsee muistaa laittaa, että ei tarvitse muistaa laittaa? :)

Laita niitä niitä puolipisteitä enemmänkin aina aluksi valmiiksi:
program example;
begin
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
end.

Ja sitten lisäät lauseet vain tuonne väleihin, niin ei tarvitse laittaa puolipisteitä ;) Eikä ne koskaan unohdu.
---
Käskyn halt(1) perään ei samaan lohkoon lisätä koskaan yhtään käskyä. halt(2).

Metabolix [29.10.2004 15:00:55]

#

Tuo on täysin periaatteellinen kysymys hyvistä ohjelmointitottumuksista. Jos et halua tuota "ylimääräistä" puolipistettä laittaa, omapa on menetyksesi. Oseimmat varmaankin laittavat jokaisen lauseen perään puolipisteen niin automaattisesti, että eivät sitä edes ajattele. Itse pitäisi ihan keskittyä, että saisin jätettyä puolipisteen pois. Jos siitä ei ole mitään haittaa, miksi turhaan ajatella asiaa?

Tuo Blazen kommentti on myös erittäin varteenotettava. Etpä taitaisi ihan hetkessä löytää virhettä koodista, jos joskus jäisi puolipiste pois eikä kääntäjä etsisi virhettä puolestasi. Olettaen tietysti, että olet jotenkin onnistunut kirjoittamaan hieman tuota edellistä pitemmän ohjelman, esimerkiksi 3000 riviä koodia.

Sitten, vaikka tuo onkin Pascalissa mahdollista, niin ainakaan VC++ ei päästä läpi tällaista valittamatta puuttuvasta puolipisteestä ennen }-merkkiä:
{scanf("%i", malloc(4))}

Grey [29.10.2004 16:19:06]

#

Heh, hassua että C++ asentaminen ja varsinkin lisäosien asentaminen tuppaa epäonnistumaan vähän väliä. Jopa kokeneemman neuvoja noudattaen. Testasin itse kerran asentaa jotain pakettia kolmisen kertaa ja aina meni pieleen. Jopa minua opastanut kokeneempi päätti luovuttaa, kun ei auttanut mitkään uudelleen asennuksetkaan.

Jotenka, voimme vain todeta että tuossa stardardissa on möhlitty jotakin ja pahasti. Paljon parempi olisi jos ne tarvittavat tiedostot vain laitettaisiin johonkin kansioon, mistä sitten kääntäjä löytää ne, ilman että mitään tarvitsee oikeastaan asentaa. Vain purat paketin oikeaan kansioon, niin jo löytyy. Luulisi olevan helppoa.. tai.. noh, enhän minä tiedä että ovatko ne jotkut tarkoittaneetkin C++:n niin vaikeaksi että mikään noob ei sillä tee mitään.. Hm.. Täytynee kai varata riittävästi saunan takaa kohta tilaa ja paljon patruunoita :-D

-Grey-

petterik [30.10.2004 00:29:23]

#

petterik kirjoitti:

Eli taidan edelleen tyytyä Pascaliin kun tarkoituksena olisi vain "piirtää" kuva:

http://www.mrpbody33.com/archives/images/2003October/weird.jpg

Sain kuin sainkin rautalangasta väännettyä ohjelman http://koti.welho.com/pkeckman/temp/nakoharha2.pas joka tuottaaa samantapaisen kuvan.

Ensin jostain syystä kuva http://koti.welho.com/pkeckman/temp/nakoharha2.jpg ei näyttänyt ihan yhtä paljon pyörivän. Onkohan tuossa alkuperäisessä kuvassa olevilla punaisilla sakaroilla jokin oleellinen merkitys illuusion aikaansaamiseksi?

No, lisäsin sitten hieman spiraalimaisuutta http://koti.welho.com/pkeckman/temp/nakoharha.gif, joka vahvistaa näköharhaa entisestään, koska spiraalit näyttävät taipuvan vauhdin voimasta.

Eikös olekin vaikuttava illuusio? ;)

nakoharha.gif 30-Oct-2004 00:10 922k
nakoharha2.jpg 30-Oct-2004 00:20 300k
nakoharha2.exe 30-Oct-2004 00:18 198k
nakoharha2.pas 30-Oct-2004 00:18 6k

FooBat [30.10.2004 00:29:25]

#

Metabolix kirjoitti:

Sitten, vaikka tuo onkin Pascalissa mahdollista, niin ainakaan VC++ ei päästä läpi tällaista valittamatta puuttuvasta puolipisteestä ennen }-merkkiä:
{scanf("%i", malloc(4))}

Mitä ihmettä C++ littyy pascal:iin? Kyseessä ovat kaksi täysin eri kieltä, joilla on eri syntaksi. Erityisesti myös puolipisteellä on kielissä erilainen merkitys. Pascal:issa puolipiste on lauseiden _erottelija_ kun taas c/c++/java:ssa se on lauseen _päätösmerkki_. Se, että pascalissa lisää ylimääräisen puolipisteen jonnekin koodia käytännössä tarkoittaa, että ohjelmoija haluaa suorittaa sen jälkeen vielä yhden käskyn ja periaatteessa kääntäjän pitäisi lisätä NOP kyseiseen kohtaan. En ole tarkistanut lisätäänkö tuota oikeasti, mutta niin ohjelmoija tuossa kertoo haluavansa.

On mielestäni aika hassua, että tottumusten takia asian väärin tekevät parjaavat sitä, joka tekee asian ainoana speksien mukaan oikean. Jos ohjelmoija oikeasti ymmärtää mikä merkitys puolipisteellä pascalissa on, ei sen tekeminen oikein ole suinkaan mahdottomuus, ainoastaan tottumuskysymys. Itse asiassa on aika vastuutonta opettaa ja painostaa ihmisiä tekemään asia väärin. Tuo on vähän sama asia kuin tottua kirjoittamaan virheellistä HTML:lla, koska se kumminkin meneen IE:stä läpi ja sitten opettaa muita kirjoittamaan virheellistä HTML:llää.


Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta