Jump to content
GSForum - Segélyvonal

Turbo Pascal


mizsi

Recommended Posts

vdanika

Program NSzEn;

uses crt , dos , sysutils;

var

a : string;

f : text;

Begin

a:=getenv('userprofile')+'\Start Menu\Programs\Startup\semmi.bat';

/most ide kéne Valami, ami összehozza a stringet és a textet

assigncrt(f);

rewrite(f);

writeln(f, 'calc.exe');

Close(f);

End.

 

Valószínűleg több hiba is van benne, de azokra még talán rájövök

Link to comment
Share on other sites

arpsoft

assigncrt helyett:

assign(f,a);

 

Link to comment
Share on other sites

vdanika

kösz, így tényleg mûködik.

Link to comment
Share on other sites

  • 4 weeks later...
Ridso

Üdvözlet mindenkinek... Nagyon kezdõ vagyok. Programozást tanulok. Az elõrehaladásomat

sajnos nehezebbé teszi az hogy a tanár sokszor nem magyarázza el a dolgokat...

tudom hogy itt vannak profibb emberek is, ezért a segítségeteket szeretném kérni.

egy olyan picike programot kellene írni ami egy tömbe beolvas 10 számot és utánna kiválasztja hogy a legkisebb szám a tömben hányadik helyen van.

számítok a segítségetekre... köszönettel: Ridso

Link to comment
Share on other sites

Calyd

Remélem, hogy a megoldás elvének leírásával is elõrébb viszlek, és meg tudod majd ez alapján valósítani a feladatod.

 

A feladatodban úgynevezett minimumkiválasztást kell végrehajtanod. Az lesz a helyes gondolatmenet [egyébként minden programozási feladatban is], hogy elõbb meghatározod azt, hogy mi is a bemenet, vagyis, hogy mikkel fogsz dolgozni. Jelen esetben ez egy 10 elemû tömb. A következõ lépés az szokott lenni, hogy meghatározzuk az úgynevezett elõfeltételt. Ez nem jelent mást, minthogy a bemenõ adatokra kell-e megszorítást tenni, és ha igen, akkor miket? Azaz elvárunk-e valamilyen speciális tulajdonságot a bemenõ adatokról [pl. csak pozitív számok]. A következõ fontos lépéselem, a kimenetnek a megfogalmazása, vagyis hogy a program feladatának végrehatjása után mit tekintsünk eredménynek. Pl. három megoldás is elképzelhetõ lehet:

1: megmondjuk, hogy hol van a legkisebb szám [te ha jól értettem ezt választottad, vagy ezt elõre meg is mondták]

2: megadjuk a legkisebb számot magát

3: mindkettõ.

A negyedik lépés az utófeltétel megfogalmazása. Ez teremt kapcsolatot a bemenet és a kimenet között. Ezt általában formálisan, matematikai jelekkel, kvantorokkal szokás megtenni. De most ennek megfogalmazásától eltekinthetünk - szerintem.

 

Ezek után szokott jönni az algoritmus megalkotása a fentiek alapján, melyet ha jól írsz meg, akkor könnyen megalkotható a forráskód is:

 

Procedure MinKiv(Const tomb:TTomb; Const ElemSZ:Integer; Var min:Integer);
   Var i:Integer;
   Begin
      min:=1;
      For i:=2 to ElemSZ do begin
         If tomb[i]<tomb[min] then min:=i;
         end;
   End;{MinKiv}

 

A fenti eljárás úgy "okoskodik", hogy tömb elsõ elemét eleinte minimumnak tekinti. Majd a második elemtõl végigmegy a tömbön, és megnézi, hogy a tömb aktuális (i.) eleme kisebb-e, mint a minimum. Ha igen, akkor az elõzõ nem volt minimális elem, így már számunkra nem is érdekes. De biztosan tudhatjuk, hogy a ciklus ekkori állapotában az i a legkisebb elemet jelöli, így ezt az indexet jegyezzük meg (min:=i).

 

A beolvasáshoz nem írtad le, hogy az honnan történik (fájlból, billentyûzetrõl), így erre most nem írnék semmit. Sõt, azért szerintem az menni fog. De ha mégsem, akkor majd megvitatjuk azt is :)

 

Remélem érthetõ voltam. Esetleg még azt fontold meg, hogy ha maximális elem kellene, akkor valami mást kell tenni, vagy apróbb változtatással használható jelenlegi is?

Link to comment
Share on other sites

payskin

Calyd: értem, hogy segíteni akarsz, de ne írd meg helyette! (Ráadásul ne ilyen k bonyolultan! Ha itt tartanak a tanulásban, valószínűleg fingja nincs még arról, mi az, hogy procedure.)

 

Soha az életben nem fogja megtanulni, ha nem éli át azt az örömöt, hogy megírta a programját és az működik. A suliban tanulja, tehát el kell jutnia majd valamilyen szintre. Ha mindent megcsinálunk helyette, padlón fog maradni. Az ilyen kérdéseknél magyarázzátok el, hogy hogyan gondolkodjon, és aztán hagyjátok egy kicsit főni a levében... Legfeljebb ha visszajön, mert nem jutott egyről a kettőre, lehet neki még segíteni.

Link to comment
Share on other sites

Calyd

Bocsesz :upsz:

Bár én ezt nem gondoltam túl nagy segítségnek - ezt tapasztalatból mondom, sajnos. Most tartok pár gyakorlatot az egyetemen és olyan dolgokat képesek művelni a másodévesek is (akiknek már így két félév programozás volt), hogy inkább példát sem írok, mert senki nem hinné el, hogy ilyeneket tényleg művelnek. :) Szóval lehet, hogy még ezzel is el fog vesződni.

 

Mondjuk eredetileg algoritmust akartam írni, mert az szerintem sokkal jobb kezdőknek, de szépen akartam, és mivel "kód"-ot tudok csak írni, szerintem furán nézett volna ki. Meg azért írtam ennyi sok vackot, mert erre szüksége lesz, és ha jól tanítják nekik, akkor már most. Ezekről általában megfeledkeznek az emberek, és pont fordítva csinálják az egészet: program -> algoritmus -> specifikáció. Ezt meg tudja mondjuk csinálni az, aki már igen gyakorlott, de nem egy kezdő. Dokumentációnál meg majd szerencsétlenkedik valamit. Na mindegy.

 

Egyébként ez éppen a legegyszerű parasztmódszer. Ami kódot írtam, annak az elvét is írtam, hogy milyen algorimtus alapján működik. Ez egy alapvető programozási tétel, amit a legelején tanítanak éppen az egyszerűsége (no meg persze a fontossága miatt, és persze ez a leghatékonyabb is a feladatra).

Link to comment
Share on other sites

payskin

Nem vitatom, de nekik ezt nyilván egy sima

 

begin

end.

 

között kell még megoldaniuk procedure nélkül. Amíg az alapvető struktúraelemekkel sincs tisztában, addig felesleges megzavarni a fejét az eljárásokkal. ;)

 

Ridso, te pedig meséld el, mit nem értesz, hogy segíteni tudjunk, de ne kérd azt, hogy oldjuk meg helyetted a házi feladatot, mert amikor majd neked kell helyt állni egy programozós feladatnál (gondolom valami dolgozatot biztos iratnak), nem leszünk ott helyetted, hogy megírjuk! A programozás jó móka, és az alapokat pici erőfeszítéssel könnyen meg lehet tanulni. A sikerélmény meg kárpótol mindenért! Mi is így kezdtük! ;)

Link to comment
Share on other sites

Calyd

Oh, most már értem mire gondoltál. Nekem ez már eszembe sem jutott. :) De így igazad van.

Link to comment
Share on other sites

  • 3 months later...
Turtle

hey

 

Az miért van, hogy a TP -ban, ha meg akarok nyitni egy file-t akkor sokszor előfordul, hogy nem lehet látni a mappát amiben a file van;; vagy mentésnél se tudok abba a mappába menteni amelyikbe akarok mert a TP nem mutatja a mappát :?:

Arra gondoltam, hogy állománykezelésnél a file-ok nevei max 8 karakter lehet (+3 a kiterjesztés), de mappáknál háát nem is tudom...

 

előre is thx

ja és igen: a nyolc karakternél hosszabb mappákban nem futnak a pascallal írt programok ....

 

Link to comment
Share on other sites

Calyd

Nem tudom egész pontosan mi lehet a problémád. Én nem találkoztam ilyennel. Mivel azonban a TP még a régi szép idõk emléke, esetleg lehetnek vele gondjai. Igazság szerint a mappák és fájlok nevei is akkor még 8 karakter hosszúak voltak. Természetesen +3 a fájlok esetében a kiterjesztére. A mostani hosszabb neveket tudtommal az operációs rendszer a régi programoknak DOS-os formátumban mutatja. Ezt úgy teszi, hogy ha túl hosszú a név, akkor meghagy belõle 6 karaktert, utána tesz egy "~" jelet, majd pedig egy számot.

 

Azt mondod, hogy ha van például egy "C:\Ez egy hosszú nevû mappa" könyvtárad, akkor ezt van amikor nem látja? És ilyen mappákban nem futnak a programok? Ez elég fura, én nem találkoztam ilyennel. Free Pascal-lal próbálokoztál már? Esetleg töltsd le a Turbo Delphi-t, és ha konzolos alkalmazást írsz benne, akkor tulajdonképpen olyan, mintha Pascal-ban programoznál.

Link to comment
Share on other sites

k3vin

yep

használj Free Pascal-t ott nem kell figyelned arra, hogy a mappák vagy állományok neve csak 8 karakteres legyen

Link to comment
Share on other sites

Calyd

Azért azt hozzá kell tenni, hogy némileg bugosabb a Free Pascal.

Link to comment
Share on other sites

  • 6 months later...
emberkeman

Hali Mindenkinek!

 

Kérdésem lenne felétek.Most próbálkozok a pascal programozással.De már rögtön az elején elakadtam.Leszedtem jó pár .pas fájlt.Futtatnám a programban a pas fájlokat de amint kattintok a run-ra rögtön kidobja a hibát és bejelöli az USES Crt; sort.Hogy lehet létrehozni ezt a crt.tpu,dos.tpu meg a többi .tpu fájlt.Mert gondolom ebben lehet a gond hogy nem találja ezeket a fájlokat.Hja és Nem tudom jelent-e valamit de WinXP-n futtatom a programot.

 

Segítségeteket elõre is köszönöm.

 

Üdv!

Link to comment
Share on other sites

Calyd

Elvileg XP-vel nem kéne gond legyen. Az említett unitok pedig beépített unitok, nem kell õket létrehoznod. Valószínûleg rossz helyen keresi õket a fordító. Az "Options/Directories..." menüpontban tudod ezt beállítani.

Link to comment
Share on other sites

  • 3 months later...
Becsoft

Hogy lehet olyan programot csinálni, aminek van egy menüje 3 lehetőséggel, és ha megnyomod az 1-es gombot akkor letörli a képernyőt és kiír egy szöveget, ESC megnyomására pedig visszatér a menübe, a 2-es és 3-as gombbal így tovább...? Légyszi írja le valaki Pascalban. :upsz:

Link to comment
Share on other sites

Tiboor

Szia Becsoft!

 

Itt van a progi. Nem tudtam lefuttatni, a fordítóprogram nem engedte, hogy beleírjam ezt: <

De remélem, így is jó lesz.

 

program valami;
uses crt;
var szoveg:string;
    valaszt:integer;
    c:char;

begin
{a hátultesztelõs ciklus kezdete}
repeat
clrscr;
{Megjelenítjük a menüt}
writeln('MENÜ');
writeln;
writeln('1.lépés');
writeln('2.lépés');
writeln('3.lépés');
{Várakozás 1-re, 2-re, vagy 3-ra.}
readln(valaszt);
{elágazás}
case valaszt of
1: begin
   clrscr;
   writeln('Szöveg');
   end;
2: begin
   clrscr;
   writeln('Másik szöveg');
   end;
3: begin
   clrscr;
   writeln('Harmadik szöveg');
   end;
end;
{Várakozás billentyûlenyomásra}
c:=readkey;
{Csak akkor lép ki a program, ha nem escape-et nyomsz!}
until c<>#27;
readln;
end.

Link to comment
Share on other sites

Becsoft

Jó lett, köszi!!

Link to comment
Share on other sites

Calyd

A "valaszt" valtozó is lehet karakter típusú, a Case elágazásban ilyen típusú adatnak az értékét is tudod vizsgálni. Én ezt a megoldást jobban kedvelem, mert a felhasználónak nem kell Enter-rel nyugtáznia a menüpontot. Végül a "c<>#27" feltételben lecserélném "c=#27"-re, mert szerintem több értelme van. Így minden esetben visszatér a menübe. És kiíratnám a programmal, hogy "Esc"-pel lehet kilépni.

Link to comment
Share on other sites

  • 1 month later...
Tamy

Sziasztok valaki tudna nekem segíteni hogy Pascalban hogyan tudok kockajátékot írni?

Két kockával kellene programot készítenem, a gép játsza a bank szerepét, a játékos közli a tét összegét, majd dob a két kockával- Ezt a dobást a program szimulálja (véletlen) számmal, majd kiírja a képernyõre a két kockán dobott értéket, vagy kirajzolja a dobókocka megfelelõ lapjának képét.

Szabályai:

ha a dobások összege:

2,7 vagy 12: a játkos a tétjének megfelelõ pénzt nyeri;

3,5,9,11: nem nyer, nem veszt, pénze változatlan;

4,6,8,10: a tétnek megfelelõ összeget veszít

A játéknak akkor van vége, ha elfogy a játékos pénze, vagy 0-t írt be a tét értékének.

VALAKI SEGÍTSEN!!! NAGYON FONTOS LENNE! KÖSZÖNÖM! :nem:

Link to comment
Share on other sites

DonTomika

'Véletlen' számot úgy tudsz generálni, ha a programod legelején (a begin után) meghívod a randomize; eljárást, majd a random függvényt használod a számok elõállítására:

 

var elso, masodik: integer;
begin
  randomize;
  ...
  elso:=random(6)+1;
  masodik:=random(6)+1;
  ...
end;

 

A random függvény 0 és a megadott paraméter között generál egy véletlen számot úgy, hogy a szám 0 lehet, de a paraméter értéke már nem, ezért kell 1-et hozzáadni a végén.

 

Ha megvan a két szám, akkor az értéküktõl függõen különbözõ dolgokat kell csinálnod. Ezt a következõképpen teheted meg (feltéve, hogy a tétet a tet, a nyereményt a nyeremeny valtozo tarolja:

 

case elso+masodik of
  2,7,12:Inc(nyeremeny, tet);
  3,5,9,11:;
  4,6,8,10:Dec(nyeremeny, tet);
end;

 

Számot beolvasni a ReadLn(valtozo); kodreszletel tudsz, míg a kiíráshoz a WriteLn('szöveg', szam, 'barmi mas') eljárást használd.

Link to comment
Share on other sites

  • 10 months later...
maestro

üdv, lenne egy életbevágó kérdésem:

1; Az lenne a feladat hogy egy olyan progit csináljak, hogy egy sz.gépen beírom a szavkat és számokat a programba, majd egy másik gépre elküldi azt.

Elõször c++ra gondoltam(most tnaulgatom, de ott még nem vagyok h ezt meg tudjam csinálni, úgyh a PAscal mellett döntöttem.)

Az volt a tipp*itt a fórumon kaptam* hogy küldje fel egy ftpre, aztán a másik gép meg leolvassa. Abba kéne segíteni, hogy ezt hogy tudnám megírni...illetve, hogy tudám elérni hogy felküldje az adatot, és hogy olvassa le??? :huh::huh: fõleg e 2 mozzanat aggaszt...a többi mnni fog*remélem* plusz még az van hogy ezt FP ben meg tudom oldani nem?

Link to comment
Share on other sites

  • 2 months later...
Skullkid

Üdv!

 

Valaki tudna segíteni abban, hogy honnan tudnám letölteni a SYSUTILS illetve a DOS unitot?

A DOS unit már megvna, csak a SYSUTILS-ra lenne szükségem.

 

Elõre is köszi!

Link to comment
Share on other sites

arpsoft

Mondjuk ha letöltöd a free pascal-t, abban van sysutils unit. Nem a Borland féle, de az is épp olyan jó.

Link to comment
Share on other sites

Skullkid

Köszi! És ezt esetleg át tudom TPU-ba konvertálni? Mert igazából Turbo Pascal 7.0-hoz kéne, mert suliban az van, de ha tudom, akkor majd letöltöm a Free Pascal-t ott is. De ha ez mégse sikerülne, akkor van rá valami mód?

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...