Kylix/Pascal

fpc, cairo és a dinamikus tömbök

Fórumok

Pascalból, cairóval szeretnék nyomtatni, ehhez írok egy csomagot, mely az fpc-hez ill. lazarushoz illeszkedik. Printer osztály, hozzá canvas, stb. mely a cairót használja a nyomtatáshoz szükséges ps adatok előállításához.
Cairoban van egy eljárás, ami a vonalakhoz állít be patternt (ezt nem tudtam jobban leírni). Ez az eljárás így néz ki:
cairo_set_dash(cr: cairo_t; dash: PDouble; Dashnum: integer; Offset: Double);
Itt ami problémás számomra, az a dash paraméter. Ha statikus tömböt használok, tökéletesen mükszik, ha dinamikusat, akkor valszinuleg végtelen ciklusba szalad(proci terhelés 100%).
Tud valaki megoldást rá, vagy ismeri az okát? Nem szeretném korlátozni a dash paraméter méretét, illetve túl nagy statikus tömböt sem szeretnék lefoglalni neki.

Soros port printelés KÖZBEN párhuzamos port figyelés

Fórumok

Sziasztok!

Elmúlt napokban a googlet túrtam, de valahogy nem sikerül a megfelelő keywordoket megtalálni. :|

A problémám a következő, hátha valaki tudna segíteni:

Adott egy lazarusban írt program ami többek között a soros portra kötött raw printerre nyomtat (1K bufferre van a printernek, a nyomtatandó szöveg nemtöbb 300 karakternél). -szerk: a soros port és a printer is 9600bps-en kommunikál, a printelés a /dev/ttyS0-n keresztül történik-

Adott egy másik C-ben írt program ami semmi mást nem tesz, mint figyeli a párhuzamos port 4-ik lábát, van-e változás ha igen egy fájlba ír egy karaktert. Ennek ütemezése 100msec.

Az adott gép amin fut: 500mhz P3, 128mb sdram, xubuntu 7.10.

A gond pedig ott kezdődik amikor a lazarusban írt program éppen nyomtatáshoz ér, elkezd nyomtatni, eközben a párhuzamos portos program ""befagy"" (nem találok rá jobb szót). Majd a nyomtatást befejezve, fut tovább a másik párhuzamos portot figyelő program is.

Fontos lenne, hogy nyomtatás közben is tudjam figyelni a bejövő adatokat a párhuzamos porton.

Valaki ki tud segíteni pár keyworddel, rövid leírással?

Előre is köszönöm,
icee

Pascal recordok

Fórumok

Üdv!

Előkerült egy probléma, aminek nem tudom, van-e megoldása.


type csalad=record
nev:string;
gyerek:byte;
end;
var cs:array[1..100] of csalad;

Most szeretnék írni ehez egy rendezést, aminek paraméterként adom át, hogy mi szerint rendezze. Pl. rendez(nev). Az egyetlen működő megoldás az, hogy a rendezésnél egy feltétell megvizsgálom, mit adtam meg (case) és a szerint adom meg utána a rendezésben szükséges feltételt. Kb így:


case mit of
'nev': if cs[i].nev>cs[j].nev then
begin
[...]
end;
'gyerek': if cs[i].gyerek>cs[j].gyerek then
begin
[...]
end;
end;

Ez a megoldás szerintem nagyon gány, nincs erre a problémára elegáns megoldás?

Külső program/script futtatása root jogokkal? Hogyan?

Fórumok

A problémám a következő:
Készitek egy progit freepascal/lazarus-szal, firebird adatbázist használ, első indításnál, illetve ha több adatbázist akarnak létrehozni, a szükséges beállításokat csak root jogokkal lehet elvégezni. Nem bonyolultak (könyvtár létrehozás /srv alatt, /usr/lib/firebird/alias.conf írása, stb) bash scripttel mindegyik egyszerűen megoldható. Viszont elakadtam ott ha user indítja a programot, és a root jelszót is meg tudja adni, akkor sem találok lehetőséget arra, hogy az alkalmazás root hogokkal indítsa a scriptet.

Köszönök minden javaslatot!

Cairo és freepascal

Fórumok

Freepascal, lazarusból szeretném használni a Cairo-t.

Addig el is jutottam, hogy .png képet minden további nélkül létre tudok hozni.
Mivel nyomtatni is szeretnék, postscriptet is elő kellene állítanom. A cairo unit csak és szigorúan a cairo.h-ban lévő deklarációkat tartalmazza, ezt ezért kibővítettem ideiglenesen a cairo-ps.h deklarációival.

A lenti kód részben mükszik is, de vagy üres fájlt hoz létre, vagy létrehozza a .ps fájlt, de egy 1x1 pontos üres dokumentum az eredmény, ami mindent tartalmaz, de BoundingBox 0 0 1 1 bejegyzést tartalmaz, ill. a dokumentum nem rendelkezik tartalmi résszel.

köszönök bármi féle segítséget.

program project1;

{$mode objfpc}{$H+}

uses
{$IFDEF UNIX}{$IFDEF UseCThreads}
cthreads,
{$ENDIF}{$ENDIF}
Classes, Cairo
{ add your units here };
var
surface: Pcairo_surface_t;
cr: Pcairo_t;

begin
surface := cairo_ps_surface_create('/home/zsolti/cairoprb.ps', 500, 800);

cr := cairo_create(surface);

cairo_select_font_face (cr, 'courier new', CAIRO_FONT_SLANT_NORMAL, CAIRO_FONT_WEIGHT_BOLD);
cairo_set_font_size(cr, 8);
cairo_set_source_rgb(cr, 0, 0, 0);
cairo_move_to(cr, 20,10);
cairo_show_text(cr,'Hello world !');
cairo_show_page(cr);

cairo_destroy(cr);

cairo_surface_destroy(surface);

end.

Lazarus probléma

Fórumok

Most kezdtem egy Pascalt/Lazarus-t tanulni.
Egy olyan programocskát írok, ami kiírja az n-edik prímet (Lazarus-szal). Előtte megírtam a parancssoros verziót pascalban és c++ -ban is. Ha beírok egy számot, és a Számolj-ra kattintok, akkor tökéletesen működik. De ha utána beírok egy másik számot, és megint a Számoljra kattintok, akkor minden esetben 2 -t ír ki (Akár a 100. prímre is). Ezután, ha beírok egy számot, és megint a számolj-ra kattintok, akkor vagy kiír 2-t megint, és utána a többi próbálkozásnál már prímet ír ki, de nem az általam megadottodikat (Ezt hogy tudnám szebben megfogalmazni?:)), vagy (Ha jól néztem ez akkor történik, ha az első beírottnál kisebbet írok be) lenyomva marad a gomb, és csak dolgozik, kilépési kérésre nem reagál stb. (Talán a végtelen ciklsban marad? )

Mit rontottam el?

A forráskód szerintem lényeges része: (Ez fut le, ha a számolj-ra kattintok)

procedure TForm1.Button1Click(Sender: TObject);
begin
vegtelen := 5;
n := 1;
prime := 1;
text := Edit1.text;
Val(text, primk, primk);
while vegtelen = 5 DO
begin
n := n+1;
o := 1;
while o
begin
o := o+1;
if o = n then break;
m := n mod o;
if m = 0 then
begin
prime := 0;
break;
end
else
prime := 1;
end;

if prime = 1 then
prsz := prsz+1;
if primk = prsz then
begin
Str(n,text2);
Edit2.text := text2;
n := 1;
break;
prime := 0;
end;
end;
end;

Köszönöm: Zsolt

FreePascal az iskolában?

Fórumok

Egy gimnázium matematika tagozatos tanulója vagyok. Elképzelhető, hogy az iskola a programozás-oktatásbanlegalábbis részben átáll Free Pascalra. Ehhez kellenek az érvek.Tények:

  • Jelenleg, mint a legtöbb iskolában, ahol programozást tanítanak, Turbo Pascalt tanítanak. Ez az informatika órai feladatoknak meg is felel. A diákok által használható gépeken Linux van, így dosemu-t használunk a TP futtatásához.
  • A matematika tagozaton tavaly algoritmurokról is tanultunk, ehhez kapcsolódóan mindenkinek meg kellett oldania egy-egy (különböző nehézségű) programozási feladatot. Ezek komolyabb matematikai algoritmusok, amikben az is számít, hogy a program sok adaton is gyorsan fut-e.
  • Az iskola nyújt matematikai internetes szolgáltatásokat, többek között feladatgyűjteményeket. Az algoritmusokról szóló feladatok megoldási algoritmusait az interneten is közzé szeretnénk tenni. Jó lenne kihasználni a Free Pascal előnyeit (legalábbis az a FP-t ismerők számára), de nehézkes karbantartani mind a TP, mind az FP kódot.
  • Én kezdeményeztem a Free Pascal használatát, részben a matematikatanárom is támogatja. A tavalyi feladatokat Turbo Pascalban csinálták a legtöbben. Sokan vannak, akiknek könnyen lehet, hogy még a Free Pascal telepítése és használatba vétele is gondot jelentett volna, épp azért használtunk TP-t, mert informatika órán is azt tanították.

Mit várunk a Free Pascaltól:

  • A Turbo Pascal kereskedelmi program, míg a Free Pascal szabad szoftver, tehát szabadon terjeszthető, módosítható, a beépített unitok forrása megtekinthető.
  • A Turbo Pascal legújabb verziója 1992-es, míg a Free Pascalt folyamatosan fejlesztik, így belekerülnek a modern nyelvi konstrukciók (pl. dinamikus tömbök, jó OOP-támogatás) és az operációs rendszerekhez kapcsolódó újabb funkciók. Az új funkciók olyan szerkezetek egyszerű megvalósítását is lehetővé teszik, amelyek Turbo Pascalban sokkal bonyolultabban valósíthatók meg, pl. dinamikusan változtatható méretű tömbökét. Egy olyan feladatban, amelyben az algoritmusnak sok adaton kell gyorsan működnie, ez fontos.
  • A Turbo Pascal kizárólag DOS-os, 16 bites programokat tud készíteni. Ez egyrészt sebességcsökkenést eredményez, mert a mai operációs rendszereken (Linuxon és egyéb Unix-szerű rendszereken és Windowson) csak valamilyen emulációs megoldással futtatható, másrészt dinamikus memóriakezeléssel is csak maximum 1 MB memóriát tud felhasználni. Ezzel szemben a Free Pascal Linux, Windows és még sok más operációs rendszerre natív kódot tud készíteni, és a programok az egész rendelkezésre álló memóriakapacitást.
    felhasználhatják.

Továbbá véleményem szerint nem okozhat problémát az átállás, hiszen a Free Pascal TP kompatibilitási módban felülről kompatibilis a Turbo Pascallal.

Az informatika tanárok által felvetett problémák és a válaszaim (nem mindenhol szó szerint) a következők voltak:

  • - Csak angolul van dokumentáció, könyv is kevéssé kapható hozzá, a többlettudását pedig jó dokumentáció nélkül nehéz kihasználni.
    - Mivel megfelelő kompatibilitási módban kompatibilis a Turbo Pascallal, illetve az Object Pascallal (Delphivel), és a TP-hez képesti többlettudásának a nagy része is megegyezik a Delphi megvalósításaival, az ezekhez készült leírások általában használhatók. A matematika órán néhány info. órán nem tanult konstrukciót megbeszéltünk, ami kellhet a feladatok hatékony megoldásához. Ráadásul bizonyos konstrukciók sokkal gyorsabban elmagyarázhatók, mint a Turbo Pascal-beli helyettesítésük (pl. mutatókezelés helyett dinamikus tömbök). Magyar nyelvű könyvet elég gyorsan találtam az interneten. Továbbá ha ez nem is várható el, a diákok jó része meg tudja érteni a (szerintem viszonylag egyszerű nyelvdezetű) dokumentációt, így kihasználhatja a Free Pascal előnyeit.
  • Az ingyenesség valóban fontos, de akinek ez a legfontosabb, az használhat TP5.5-t, az ingyenes.
    Nem is tudom, mi a különbség egy modern szabad szoftver és egy 20 éves freeware között.
  • Egyetemen legalább féléves tananyag a kód hatékonységának növelése, melynek nyilván csak egy csekély szelete a fordító hatékonysága. Én az oktatásban nem ezt érzem a legfontosabb szempontnak.
    A matematika órán előkerült algoritmusokban lényeges, hogy az algoritmus sok adatra is elfogadható sebességgel is működjön, a feladatnak ehhez hatékonyabb megoldását kell adni. A statikusan lefoglalható 64 kB memóriában egyszerűen nem lehet annyi adatot elhelyezni, hogy az algoritmus sebessége számítson, nem lehet összehasonlítani az algoritmusok sebességét. Nem is lehet úgy jó programot írni, hogy előre megadott, statikusan lefoglalt memóriamennyiséget használunk (miközben a legtöbben csak ezt ismerik), így vagy fölöslegesen fogyasztjuk a gép erőforrásait, vagy nem használjuk ki azokat. Pláne későbbi felhasználásra szánt függvényt. Sokszor még 1 MB sem elég vagy az adatok elhelyezéséhez, vagy esetleg az algoritmus futása közben ideiglenesen tárolt adatokhoz, és a mutatók használatát sokkal nehezebb megértetni azokkal, akik csak az iskolában tanultak programozni, mint a Free Pascal (vagy Delphi) dinamikus tömböket. (Free Pascalban még a mutatók kezelése is szabadabb.) Emellett bár lehet, nem érdemes hatékony kódot írni egy elavult fordító számára egy elavult operációs rendszerre, mert sokkal többet számítana a modern operációs rendszeren futó modern natív kódra való áttérés.
  • Én a "helyette" szót kicserélném "mellette"-re, azaz 9., 10. osztályban (matek tagozaton) az érdeklődők valóban használhatnak inkább FreePascal-t TP helyett.
    Nem csak az érdeklődőkről van szó. 9.-ben mindenki kapott (komolyabb-kevésbé komoly) leprogramozandó matematikai algoritmust, ahol sok esetben számított a sebesség is, illetve nagy adathalmazokkal, vagy bonyolultabb struktúrákkal kellett dolgozni. Valószínűleg sokaknak még a Free Pascal fordító beállítása és használata is gondot okozott volna.

A legújabb levelemre, amit már elég régen írtam, még nem kaptam választ, matektanárom szóbeli konzultációt javasolt.

Várom a véleményeket, további érveket.

Programozás GUI-s segítőprogi

Fórumok

Na, ez a cím jó gagyi lett :D

Szóval a lényeg, hogy nagyon kezdő szinten szeretnék próbálkozgatni programozással. Régen Win-en, Delphivel voltak jó tapasztalataim, röviden annyi a kérdésem, hogy mi az ami legjobban hasonlít hozzá és fut Linuxon (Ubuntu Dapper) ?

Én úgy tudom, hogy Kylix olyan, mint a Delphi ... megpróbáltam feltelepíteni, nagy nehezen az összes indítási hibát leküzdöttem, de regisztrációt kér. Nem is ez a baj, hanem, hogy a regisztrációhoz a weblapon a személyes adatok mellett megkövetel 2féle azonosítókódot is, levelet meg nem küldtek... Szóval nem tudom.

Nekem más progi is jó, de Pascal kéne (az az egyetlen amit _valamennyire_ ismerek) és a GUI fontos (táblázatok kellenek, felugró ablakok, stb.)

Köszi szépen minden tippet!