40 éves lett a Turbo Pascal!

Címkék

Milliók tanultak meg programozni a rendkívül sikeres Turbo Pascal valamely verzióján. HB!

Hozzászólások

Első programok egyike amit írtam benne, az 80x25-ös karakteres képernyőn falakról visszapattanó kígyó. Vagy ilyesmi.

trey @ gépház

Tisztán megvan az első program, amit Turbo Pascalban írtam.

Volt valami levelezős matek versenyfeladat 1992-ben, az volt a kérdés, hogy hány 100-nál kisebb osztója van 2^1992-1 -nek.
Ma sem tudom, hogy kellene ezt "ésszel" megoldani papíron ceruzával. Egy-egy prímet még csak-csak megnézek, de 25-öt.

Akkori programozási tudásommal csináltam egy 600 elemű tömböt a számjegyeknek, abba szépen kiszámoltam a 2^1992-1-et,
aztán nekiálltam osztani.

Kongruenciaval megoldhato, de joval tobb macera, mint mondjuk a mai technikai szinten beirni 3 sort a python interpreterbe:

>>> x = (1<<1992)-1
>>> divisors = [i for i in range(1, 100) if x % i == 0]
>>> len(divisors)
17
>>> len(str(x))
600
>>> divisors
[1, 3, 5, 7, 9, 13, 15, 17, 21, 35, 39, 45, 51, 63, 65, 85, 91]
>>> x
448488552841505673528450469210032025008717852378396562686579194072564945856394653850257611842385261686892954937104477645877780844087130988838254436002598900543476520098876093752690543547812675279019246054935493143678185404868704546669207132970571695198847642805321870347439959396966061131000641492071612036500659800720541037509294862530914292581776470704800791862135257150476594266547973795942452669207838277325767258308678827571890789686926497076331599351180046564667803842147156402969070145377463213888204787436429748157612446950906462925450296030791504591545034378214229573507677553758534574800895

A also par sor mar csak kivancsisag :)

Persze lehet meg ennel is egyszerubb modja.

A strange game. The only winning move is not to play. How about a nice game of chess?

Tök jó ez a Python, hogy dolgozni, számolni tud egy 2^1992 nagyságrendű számmal, de '92-ben, Pascalban ez azért nem volt triviális. 

Most néztem, hogy pl. a FreePascal QWord, vagy a Delphi Uint64 (64 bites, előjel nélküli egész) típusa is max. 2^64-1 = 18446744073709551615-ig működik. Szóval most sem triviális.

[Falu.Me]==>[-][][X]

Ha a matekos iranyba indulsz el, akar az uint16_t is eleg lehet (mindig veszed a <100 modulust szorzas/hatvanyozas utan). De igen, emlitettem is a mai technikai szintet. Amugy a bongeszod tud JS-t, abban is van mar beepitett BigInt support. Talan libbol Delphiben/Pascalban is elerheto.

A strange game. The only winning move is not to play. How about a nice game of chess?

Nem kell ehhez Python. A C-style arbitrary precision calculator (calc, ami nem keverendő a LibreOffice Calc-kal) egy kis nyelv, a bc-re épül, egy 22 KB-os bináris, simán számol 2^10^7 méretű, azaz 2^10000000 méretű számításokat, kivárható, pár mp. idő alatt, egy átlagosabb, nem csúcs, de modern gépen, laptopon. Ilyennél gyakran már nem is a proci a szűk keresztmetszet, hanem a memória.

Megint más, hogy ma sem életszerű, mert a 2^1992-en egy 600 jegyű, a 2^10^7 meg kb. 3 millió decimális számjegyű eredmény, nem lesz érdekes, hogy mi pontosan az alakja, mi az utolsó számjegye, stb., inkább csak a nagyságrend érdekes, így egy osztásnál elég vele 2 ÷ tetszőleges_érték × 2^1991-en, és ezt normál alakban felírni logaritmus segítségével, vagy hasonló, hogy nagyságrend meglegyen.

A π és e kiszámításának 3 trillió tizedesjegyre sincs sok gyakorlati haszna, mert egyik gyakorlati alkalmazás sem igényel akkora precizitást. Csak egyfajta technológiai mutatvány, meg tudományos érdekesség.

A computer is like air conditioning – it becomes useless when you open Windows.” (Linus Torvalds)

Van egyszerűbb, bár kérdéses a válasz minősége:

 

You

Hány 100-nál kisebb osztója van 2^1992-1 -nek?

 

ChatGPT

A szám, amit leírtál, a 2^1992-1, egy Mersenne-prím, mivel a kifejezés a Mersenne-szám két egész kitevőjének különbsége. Egy Mersenne-prímnek csak két osztója van: 1 és maga a Mersenne-prím szám.

Tehát a 2^1992-1-nek csak két osztója van, és mindkettő kisebb mint 100. Az egyik az 1, a másik pedig maga a 2^1992-1.

Ezért a válasz: 2.

 

You

2^1992-1 az kevesebb mint 100?

 

ChatGPT

Elnézést a félreértésért. A kérdésedre visszatérve: 2^1992-1 egy rendkívül nagy szám, és biztos lehetünk benne, hogy jóval több, mint 100. Az ilyen típusú számokat nehéz pontosan kiszámolni vagy ábrázolni hagyományos módszerekkel.

Tehát, hogy tisztázzam, a 2^1992-1 jóval nagyobb, mint 100. A korábbi válaszomat elnézéssel visszavonom. Ha további kérdéseid vannak, állapotban vagyok segíteni!

 

You

Oké, akkor ezt figyelembe véve hány darab olyan osztója van, ami 100-nál kisebb?

 

ChatGPT

A Mersenne-prímek esetében ismert, hogy ha 2�−12p−1 prímszám, akkor �p is prímszám. Ezt Mersenne-feltételnek nevezik. Tehát a 2^1992-1 esetében 19921992 is prímszám.

Ha egy szám prímszám, akkor csak két pozitív osztója van: az 1 és maga a szám. Tehát a 2^1992-1-nek csak két pozitív osztója van, ami 100-nál kisebb, és ezek az 1 és maga a szám.

Ezért a válasz: 2. Az 1 és a szám önmaga, 1992 karakter hosszú, és mindkettő kisebb, mint 100.

 

You

Az előbb még azt mondtad, hogy maga a szám nagyobb mint száz.

 

ChatGPT

Elnézést a zavarért, és köszönöm a türelmedet. Igen, tényleg hibáztam az előző válaszomban. A 21992−121992−1 valójában hatalmas szám, és jóval nagyobb, mint 100. Tehát kijelenthetjük, hogy nincs olyan osztója, ami 100-nál kisebb lenne.

Az előző válaszaimban történt félreértésért elnézést kérek. Ha van további kérdésed, szívesen segítek.

 

You

A kérdés ugyanaz. Mi a jó válasz?

 

ChatGPT

Igen, elnézést a korábbi félreértésért. Ha 21992−121992−1 egy Mersenne-prím, akkor a szám prímszámságából adódik, hogy nincsenek más osztói, kivéve az 1-et és magát a számot. Tehát 21992−121992−1 csak két osztóval rendelkezik: 1 és maga a szám.

Mindkét osztó kisebb, mint 100, tehát mindkettő a keresett osztók közé tartozik. Így a válasz továbbra is 2, és ezek az osztók az 1 és a 21992−121992−1.

 

You

miért gondolod, hogy mindkét osztó kisebb, mint 100?

 

ChatGPT

Az előző válaszaimban elkövetett hibámért elnézést kérek. A 21992−121992−1 valójában egy hatalmas szám, és mindkét osztója, az 1 és a szám maga, jóval nagyobb, mint 100. Az előző válaszaimban téves információt közöltem, és ezt sajnálom.

A helyes válasz az, hogy mindkét osztója nagyobb, mint 100. Tehát a 21992−121992−1 osztói nem felelnek meg a feltételnek, hogy kisebbek legyenek mint 100. Az osztók száma 2, az 1 és a 21992−121992−1, és mindkettő nagyobb, mint 100.

 

You

az egy is nagyobb mint száz?

 

ChatGPT

Elnézést a félreértésekért, és köszönöm a türelmedet. Igen, a 1 kisebb, mint 100. Tehát a helyes válasz az, hogy a 21992−121992−1 két osztója a 1 és a 21992−121992−1 mindkettő kisebb, mint 100. Tehát a válasz továbbra is 2. Az 1 és a 21992−121992−1 mindkettő kisebb, mint 100, és mindkettő osztója a 21992−121992−1 számnak.

 

You

a két szám közül melyik kisebb, és melyik nagyobb mint 100: 1 és 2^1992-1 ?

 

ChatGPT

Az 1 kisebb, mint 100, mivel 1 < 100. A 21992−121992−1 pedig egy rendkívül nagy szám, ami jóval nagyobb, mint 100.

Tehát, hogy tisztázzuk:

  • Az 1 kisebb, mint 100.
  • 21992−121992−1 pedig jóval nagyobb, mint 100.

Elnézést a korábbi félreértésekért, és köszönöm a pontosítást.

 

You

okés, akkor ezt figyelembe véve hány darab 100 -nál kisebb osztója van a 2^1992-1 értéknek?

 

ChatGPT

Eddig tisztáztuk, hogy 21992−121992−1 két osztója van, az 1 és a 21992−121992−1 maga. Az 1 kisebb, mint 100, de a 21992−121992−1 jóval nagyobb mint 100.

Tehát a 21992−121992−1 egyetlen osztója sem kisebb, mint 100. A válasz tehát 0. Nincs olyan osztója a 21992−121992−1-nek, ami 100-nál kisebb.

 

You

Ha az 1 osztója, és 100-nál kisebb, akkor nem lehet nulla a darabszám.

 

ChatGPT

Elnézést az előző félreértésekért. Igen, pontosan. Az 1 mindképpen osztója 21992−121992−1 -nek, és 100-nál kisebb is. Tehát a darabszám nem nulla, hanem 1. Tehát, a helyes válasz 1 darab osztó 100-nál kisebb a 21992−121992−1 szám esetében, és ez az 1.

 

 

A jó hír, hogy ezek szerint mesze vagyunk még a skynettől. :-)

Hát, én nem értek hozzá, de amióta a matematikusok lejjebb adták a mércét, és betűket kezdtek a számok közé írni, szerintem a nyelvtanászok is beleszólhatnak, hogy Bélám, rosszul ragozod azt az egyenletet...

Úgyhogy a nyelvi modell tök jó, mert vagy megadja a választ, vagy kimagyarázza, hogy miért nincs válasz, vagy hazudik egy nagyot és angolosan távozik, pont mint ahogy egy embertől is várható. :-)

A feladat megoldható azzal a maradékos osztással, amit papíron is végeznénk (angolul "long division"). Emlékeztetőül itt egy példa 10-es számrendszerben:

  4551 : 37 = 123
   85
   111
     0

Az eljárás ugye annyi, hogy először a 45-öt elosztjuk 37-tel. Hányados 1, maradék 8. Levesszük a következő számjegyet --> 85. 85-öt osztjuk 37-tel. Hányados 2, maradék 11 (mert 2*37+11=85). Levesszük a következő számjegyet --> 111. Hányados 3, maradék nulla, kész.

Ugyanezt kell elvégeznünk:

  2^1992-1 : d = ...

Fontos tulajdonságok, amelyek a feladatot könnyítik:

  • A 2^1992-1 szám 1992 db 1-es bitből áll kettes számrendszerben ábrázolva. (A 2^1992 ugyanis úgy néz ki, hogy egy 1-es, majd tőle jobbra 1992 db nulla, ebből egyet kivonva adódik a fenti.)
  • Kettes számrendszerben végezve a fenti maradékos osztást ("long division"), az osztás minden lépésben sokkal egyszerűbb, ugyanis a hányadosba bekerülő új számjegy csak 0 vagy 1 lehet (egy bit), tehát az osztó -- amit szintén binárisan ábrázolunk -- vagy megvan az éppen vizsgált osztandóban (más szóval: kisebb nála vagy egyenlő vele), vagy nincs meg benne (nagyobb nála).
  • Amikor egy új számjegyet "veszünk le", akkor mindenképpen egy 1-es bitet ragasztunk az aktuális osztandónkhoz (ld. az eredeti, teljes osztandó formáját fent). Emiatt az eredeti osztandót nem is kell teljes méretében ábrázolnunk, mert tudjuk, hogy minden alkalommal egy 1-es bitet ad.
  • A hányadost valójában nem is kell tárolnunk, minket csak az érdekel, hogy a maradékos osztás legvégén, mire elfogynak az osztandó bitjei, a maradék nulla legyen. Ekkor d osztja az eredeti számot.
  • Páros "d" (aminek van 2-es prímtényezője) nyilván nem lehet osztója az eredeti osztandónak (mivel utóbbi páratlan, nincs 2-es prímtényezője)
  • A legnagyobb kurrens osztandó, amit tárolnunk kell, az 2*(d-1)+1, vagyis 2*d-1. Ez azért van, mert a kurrens osztandót 0-ról indítjuk, valamint minden 1-es bit hozzáragasztása után megpróbáljuk csökkenteni az osztóval (d-vel). Amennyiben ez nem sikerül (a hányadosba nullás bit kerülne), úgy a kurrens osztandó *legfeljebb* (d-1) lehet. Az új 1-es bit hozzáragasztása azt jelenti, hogy a következő osztandó legfeljebb 2*(d-1)+1 = 2*d-1 = d+d-1 lesz. Ennek két következménye van: (a) ha d legfeljebb 99 lehet, akkor a legnagyobb kurrens osztandó 2*d-1 = 197 lehet, vagyis ennek ábrázolására 1 byte is elég [*], (b) egy ilyen beléptetés után az új osztandó d+d-1 érték >= d, tehát az ebből származó új hányadosbit biztosan 1 lesz, és a következő maradék (d levonása után) ismét d-1 lesz.

[*] C-ben nem érdemes uint8_t-t használni, mert a default integer promotions miatt úgyis "int"-tel dolgozik az absztrakt gép; egyszerűbb "unsigned int"-et használni.

A fentiek fényében egy rövid C program (még ez is relatíve naiv):

#include <stdio.h>

int
main(void)
{
  unsigned divisor;

  for (divisor = 1; divisor < 100; divisor += 2) {
    unsigned dividend;
    unsigned bits_consumed;

    dividend = 0;
    for (bits_consumed = 0; bits_consumed < 1992; bits_consumed++) {
      dividend = (dividend << 1) | 1;
      if (dividend >= divisor) {
        dividend -= divisor;
      }
    }
    if (dividend == 0) {
      (void)printf("%u\n", divisor);
    }
  }
  return 0;
}

A program azért "viszonylag naiv", mert nem próbál a prímosztók felől közelíteni, illetve az összetett osztókat nem használja ki. (Pl. dolgozhatna csökkenő sorrendben is, és amikor megtalálja a 85-öt, akkor rögtön adódhatna, hogy az 5 és a 17 is osztó, a 65-ből adódhatna az 5 és a 13, a 63-ból mint osztóból adódna a 7 és a 9, a 9-ből adódna a 3 stb -- ehhez az összetett osztókat kellene prímtényezőkre bontani, de ilyen kevés osztónál ez valószínűleg túlzás / nem számít.)

Mivel a topic Pascal-ról szól, ugyanez Pascal-ban:

program divisors;
var divisor:byte;
    dividend:byte;
    bits_consumed:word;
begin
  divisor := 1;
  while divisor < 100 do begin
    dividend := 0;
    for bits_consumed := 0 to 1992-1 do begin
      dividend := (dividend shl 1) or 1;
      if dividend >= divisor then
        dec(dividend, divisor);
    end;
    if dividend = 0 then
      writeln(divisor);
    inc(divisor, 2);
  end;
end.

begin
   asm
       ...
   end
end

Viccen kívül nekem is ez volt a fejlődési vonalam. GW/Q/Quick Basic után Pascal, arra x86 ASM. Eleinte csak betéteket toldottam bele a Pascal-kódba, de aztán a végén már csak program, procedure, var, begin, end maradt Pascal, onnantól tértem át ASM-re egy ideig. Innen nézve persze időpocsékolás volt mindkettő, a C/C++ már akkor is időtállóbb volt. Csak azt ugye letöltögetni akkoriban, mikor az embereknek nem volt nete, hacsak nem volt valami ismerőse valakinek, vagy tanára, aki tudott neki adni C-hez vagy full IDE-t vagy csak compilert, akkor nehéz volt beszerezni, csak drága pénzért lehetett megvenni. Pedig a gcc létezett már akkor is, csak hát ugye ahhoz net/BBS/modem kellett volna már akkor is. Így maradt a Turbo/Borland Pascal, az közkézen forgott mindenhol, meg könyv is több volt hozzá beszerezhető, így majdnem minden halandó azzal tolta, leginkább warezben. Tróger idők voltak. Persze a 90-es évek második felében már elérhetőbb lett a net, meg IT újságok is rátették néha a CD mellékleteikre valamelyik Linux disztró keretében, Slackware vagy Mandrake, hasonló.

Anno ezt a 16 színű kék interface-t is szerettem, kék háttér, sárga-fehér-szürke szöveg, a Norton Commander, DOS Navigator, Xtree, DOS Shell, Rar, Ace, DOS Edit, Q/Quick Basic, Norton Disk Utilities, Turbo Vision-t használó programok, WordPerfect 5.x is ilyesmik voltak, meg még egy csomó másik program, PE2 editor, stb.. Ma már kikészítené a szemem. Pedig néha még most is használják egyes szoftverek, text mode installerek, memtest86, hagyományos windowsos BSoD képernyő, Midnight Commander, nCurses dialog, stb..

A computer is like air conditioning – it becomes useless when you open Windows.” (Linus Torvalds)

Innen nézve persze időpocsékolás volt mindkettő

Azt nem hinném, butább nem lettél tőle. :)

Csak azt ugye letöltögetni akkoriban, mikor az embereknek nem volt nete, hacsak nem volt valami ismerőse valakinek, vagy tanára, aki tudott neki adni C-hez vagy full IDE-t vagy csak compilert, akkor nehéz volt beszerezni

Turbo C-vel hasonlóan el lehetett karistolni, emlékeim szerint nem volt sokkal nehezebb beszerezni, mint a TP-t.

Tróger idők voltak.

Hát nem tudom, én szerettem, amikor egy-egy akár apró problémával órákat el lehetett szórakozni, mert könyvekből, offline manualból (már ha volt) és próbálgatással kellett összerakni sokmindent. Ha valamit megtanultam belőle, az a problémamegoldás, és a szoftverfejlesztés valahol inkább erről szól alapjaiban, nem a nyelvekről meg frameworkökről. :)

Ha arra érted a trógert, hogy mindenki mindent onnan szerzett be, ahonnan tudott, akkor mondhatjuk így is, én inkább vadnyugatként szoktam rá hivatkozni, annak picit több a romatikája. :)

Úgy értem a trógert, hogy mai szemmel nézve fejletlen, láma. Így utólag röhögök sok mindenen. Persze nosztalgikus, mert minden egyszerűbb volt. Kb. ezt replikáltam egyébként a minimalista linuxos, keyboard driven, CLI/TUI terminal based workflow-val, amire pár éve álltam át.

Ahol én laktam, Tolna megye, ott a Turbo C nehezebben volt beszerezhető, mindenkinek a Pascal volt meg. Persze, ha bp-i volt valaki, valami nagyobb egyetemen tanult programozást, vagy a nete volt, akkor igen, hozzáférhetett a C-hez is, de lelkes, amatőr, szobaprogramozók, meg ált-középsulisoknál nem ez volt a helyzet.

A computer is like air conditioning – it becomes useless when you open Windows.” (Linus Torvalds)

Nem tudom mi volt benne a probléma, én gyakorlatilag ugyanabban a körben gyűjtöttem be a TP-t, mint a TurboC-t. (Aztán nem sokkal később már Aztec C-t is - meg valami harmadikfélét is. Meg JPI Modula-2-t.) Amúgy fejlődni kb mindegyik épeszű programozási nyelvvel lehet. Néha a nem épeszűekkel is. Amúgy nincs olyan, hogy felesleges tudás, legfeljebb hamarabb halsz meg, mint hogy használnád :-(

Ja, mert ti valószínű akkor is valami prog/mat/infó szakon nyomtátok, vagy voltak olyan ismerőseitek. Nekem nem volt, pedig szerettem volna C-zni akkoriban. Továbbra is tartom, hogy a Pascal felesleges, semmit nem lehet vele kezdeni. Elvileg Delphit lehet rá könnyebben tanulni, de arra sincs félelmetes kereslet. Keresgetnek persze rá embereket, meg jól megfizetik, de nem az a terület, amibe érdemes belekezdeni. ASM-nek sincs sok értelem ma már, kézzel nem írogat senki kódot, a fordító optimalizál, profilok alapján. Mai gigantikus kódok, meg gyakori kiadások, multiplatformos fejlesztések elég lehetetlenek is lennének ASM-ben.

Mai faitaloknak könnyebb, mindenkinek van gigás/terás tárhelye, nete (akár a zsebében is), a net ráadásul tele van nem csak egy csomó, ingyen letölthető fejlesztői cuccal (IDE-k, text editorok, compilerek, stb.), de még egy csomó könyv, videó, tutorial is elérhető, akár szöveges, akár videóformában. Nekik már nem is kell ilyen felesleges Basic, Pascal, meg elavult egyebekkel szórakozni, mindjárt mehetnek rá a modern cuccokra, C++, Rust, Go, JS, Python, amibe érdemes belekezdeni.

Egyébként ehhez a C hírneve is hozzájárult. Sokáig az emberek szakállas unixos rendszergazdák nyelvének tartották, és a DOS/Windows-világban nem szerették akkoriban a normik piszkálni. Valahogy volt egy olyan státusza, hogy azt tilos tanítani, terjeszteni, mert csak profiknak van, mindenki másnak úgyis magas és megtanulhatatlan lesz, védjük meg az embereket önmaguktól, tanítsunk nekik Basic-et, meg Pascalt. Nyilván ez megtört idővel, de sokáig tartotta magát. Tudom, hogy hülyeség, nem kell írnotok, pont azt mondom én is, hogy ez egy tévhit volt sokakban, valóságalapja nem volt.

Modula 1-2 kódokat anno láttam én is újságokban, de az kimaradt nekem teljesen. Tény, hogy az se sok mindenre használható ma már, a Basic, Pascal, Logo, stb.-vel a múltba veszett. Ahogy a Cobol, Smalltalk, Algol, Forth, Ada, meg egyéb régiségek is. Ami a régiek közül tartja magát, az a C, Fortran (ez is csak a szuperszámítógépes meg GPU-s, linpack-os felhasználás miatt), Lisp (bár ez eléggé visszaszorult, egy időben az AI-sok nyomták vele), POSIX shell / Bash scipt, SQL (ez nem prognyelv).

A computer is like air conditioning – it becomes useless when you open Windows.” (Linus Torvalds)

> Ja, mert ti valószínű akkor is valami prog/mat/infó szakon nyomtátok, vagy voltak olyan ismerőseitek.

hja akkoriban szamitogepen (mind1 hogy c64 vagy pc) mindenki csak jatszott. ha voltak is ismerosok, senkinek nem voltak ilyen cuccai, csak az epp legujabb jatekok...   suliban mar hozza lehetett jutni, de aki pl. 10 evesne kezdte mint en az nem nagyon.

en pl arrol se tudtam hogy letezik asm fordito c64-en, igy irtam egyet basicben magamnak

Ja, pont ezt mondom én is. Játékok, meg Turhó Paszkál, Q/Quick Basic, Visual Basic, Wordperfect, dBase az mindenkinek megvolt, meg DOS, meg Win3.1, MS Office, stb.. De ha C vagy C++ compiler kellett, azt már nem volt olyan triviális beszerezni sok helyen. Nem lehetetlen, de vagy szerencse, vagy élelmesség kellett hozzá. Sok embernek nem is volt meg, nem csak nekem. Ez látszott azon is, hogy sok számítógépes újságnak a mellékletein, hasábjain is inkább Basic, Pascal kódok, libek voltak, nem C. Volt C is, de messze nem olyan arányban.

A C64-nek nagy taktikai hibája volt, hogy nem volt a gépi kódú monitor beépítve a ROM-ba, és külön cartridge vagy szoftver kellett hozzá. Ezzel megnyomorították a gépet, mert a Basic-ben írt programok korlátosak, lassúak voltak. Mondjuk az badass, ha te már akkoriban tudtál írni Assemblert magadnak, nekem lehet most se menne.

A computer is like air conditioning – it becomes useless when you open Windows.” (Linus Torvalds)

 > Mondjuk az badass, ha te már akkoriban tudtál írni Assemblert

hat epitettem 12 evesen egy scannert es ahhoz kellett asm-ben "drivert" irni, a basic egyszeruen tul lassu volt a vezerleshez/mintavetelezeshez.

ahhoz meg kellett asm fordito, mert a konyvbol kikeresgelt hexa szamokat (aka gepi kod) irogatni DATA sorokba mar uncsi volt, es 10-20 utasitasbol allo asm programoknal meg elment, de bonyolultabb dolgoknal az a modszer mar nem volt valami hatekony :)

Ja, mert ti valószínű akkor is valami prog/mat/infó szakon nyomtátok, vagy voltak olyan ismerőseitek.

Tizenévesen nem igazán. :) Én bács-megyei kisvárosban nőttem fel, de olyan nagyon nem okozott problémát beszerezni az ilyesmit. Voltak "hubok", ahonnan hozzá lehetett jutni ilyesmihez: jellemzően sulik, számtech. boltok, esetleg olyan srácok, akik nagyon "mozogtak". Nyilván könnyítette a helyzetet, hogy akkoriban lemásoltad a program könyvtárát, hazavitted, és tudtad használni, nem kellett mindenféle védelemmel szórakozni.

Továbbra is tartom, hogy a Pascal felesleges, semmit nem lehet vele kezdeni.

Nem feltétlen a Pascal-tudásodra írtuk, hogy igazán hasznos vagy hogy szarrá keresheted vele magad, hanem arra az általános tudásra, amit a Pascalban való programozás során felszedtél (beleértve azt is, amikor a korlátaiba ütköztél bele).

Mai faitaloknak könnyebb, mindenkinek van gigás/terás tárhelye, nete (akár a zsebében is), a net ráadásul tele van nem csak egy csomó, ingyen letölthető fejlesztői cuccal (IDE-k, text editorok, compilerek, stb.), de még egy csomó könyv, videó, tutorial is elérhető, akár szöveges, akár videóformában.

Ez tény. Viszont én úgy tartom, hogy pont emiatt sokszor sokkal sekélyebb is a tudásuk, mert nincsenek rákényszerítve, hogy vérrel-verejtékkel szopják össze a megoldást egy-egy problémára. :) Nekünk, akik ezen már túl vagyunk, meg csak könnyebbség, bár az is tény, hogy könnyű belelustulni, cserébe marad idő pl. családra is. (Amúgy az információdömping minden más területre is igaz: főzni, parkettázni stb. is meg lehet már tanulni YT-ról.)

Egyébként ehhez a C hírneve is hozzájárult. Sokáig az emberek szakállas unixos rendszergazdák nyelvének tartották, és a DOS/Windows-világban nem szerették akkoriban a normik piszkálni. Valahogy volt egy olyan státusza, hogy azt tilos tanítani, terjeszteni, mert csak profiknak van, mindenki másnak úgyis magas és megtanulhatatlan lesz, védjük meg az embereket önmaguktól, tanítsunk nekik Basic-et, meg Pascalt.

Egyszerűen más szinten vannak ezek a nyelvek: amíg a BASIC és a Pascal relatíve magas szintű nyelvek, addik a C inkább az alacsonyabb szintű nyelvek között helyezkedik el. (Nem funkcionalitás vagy professzionalitás, hanem gépközeliség szempontjából.) C-ben sokkal többet kell bénáskodni az alacsonyabb szintű dolgokkal, ahhoz, hogy érdemben tudd használni, mint a másik kettőben, cserében sokkal több mindent meg is tudsz benne csinálni a nyelvi keretek között maradva (értsd: nem asm-betétekkel). Ez nem baj, szimplán e nyelvek sajátossága, ami abból adódik, hogy más-más célra lettek kifejlesztve.

Én úgy gondolom, hogy C-vel kezdeni a programozás oktatását nem igazán jó ötlet. Nyilván megoldható, de akivel az algoritmikus gondolkodást akarod megtanítani, azt felesleges az elején pointer-pointerekkel szívatni (ami azt illeti, szerintem az OO-val is ugyanez a helyzet), mert csak elveszel a részletekben. Pascalban is kiválóan el lehet sajátítani a részproblémákra bontás elméletét és gyakorlatát, a feltételes vezérlést, az iterációt, a rekurziót, az adattípusok fogalmát, anélkül, hogy fennakadnánk a printf formátumkarakterein. :)

Ha ezek megvannak, akkor lehet továbblépni. Ez lehet pl. C irányába, de ad absurdum lehet olyan nyelvet is választani, ami nem imperatív, és akkor azt is meg lehet tanulni, hogy sok probléma megoldásához nem kell ismerned a részlépések tényleges megvalósítását, elég ha néhány karakterisztikáját (pl. aszimptotikus viselkedés) ismered. (Pl. ha prologban akarsz programozni, nem fogsz azzal foglalkozni, hogy 5 szinttel mélyebben for-ciklussal van megvalósítva a következtetés) Szóval lehet sokfelé menni, de a C (szerintem) határozottan nem a belépő szint a programozás elsajátításához. Szakáll, persze, nem kell hozzá, de nem is hátráltat. :D

Nagyon nem értek veled egyet.

1. Tudom, én vagyok a bűnös, hogy már 6-8 évesen tudtam, hogy mi érdekel, mivel akarok foglalkozni. 15 évesen lett először számítógépem, amit ajándékba kaptam egy jóakarómtól.

2. Az írásodon hangosan fetrengenek a nevetéstől a Cobol fejlesztők. Szénné keresik magukat, majdnem mint a drogbárók. A Pascal, Delphi fejleszők csak simán mosolyognak.

3. Az SQL programnyelv. Bármennyire is nem tetszik. Ha meg nem programnyelv, akkor mi? Purhab? :D

Nem minden jó, ami új. Nem minden rossz, ami régi. A Pascalnak (+Delphi) is megvan a maga célpiaca. Rengeteg szoftvert írtak benne. Sok még ma is használt közülük, amiket nem dobnak ki, mert nem éri meg. Nagyon gyorsan lehetett benne eredményeket produkálni az ügyfeleknek.

Az a kevés Cobol fejlesztő, akire szükség van, az már rég telítette a keresletet. Az SQL inkább lekérdező nyelv, annak ellenére, hogy lehet bele másmilyen kódokat is szögelni.

A Pascalt ma már semmire nem használják, Delphi-s projektből van néhány, főleg a GUI Commanderek fejlesztői szeretik, de elég rétegigény. Nem azt mondom, lehet benne sok mindent írni, csak minek ölné bele az ember most az energiát a népszerűbb alternatívákhoz képest, amikhez több tananyag, példakód, lib van. Nyilván lehet széllel szemben hugyozni, csak nem érdemes, főleg a legtöbb embernek.

A computer is like air conditioning – it becomes useless when you open Windows.” (Linus Torvalds)

Az a kevés Cobol fejlesztő, akire szükség van, az már rég telítette a keresletet.

Ha így lenne, nem keresnének ennyit. Ugyanis a kínálati oldal szűkössége határozza meg az árat. Kereslet lenne több (több feladat lehetne párhuzamosan), de nincs annyi fejlesztő.

Windows BSOD már grafikus módban megy talán Vista (2006) óta, nem szöveges módban. Ráadásul NT alatt sem 80x25 volt, inkább 80x50 (de itt sem karakteres módban, hanem valami .720×400 videómódban, ld. wiki). Mert sok pofázhatnékja volt minden crash alkalmával. Cutler tudna róla biztos sztorizgatni, még nem volt alkalmam megnézni azt a 2+ órás Daves Garage epizódot tecsőn.

Valamint vista óta nem is tud textmode-ot egy windows sem, pl. utóljára XP alatt tudtál a cmd.exe-re Alt+Enter-t nyomni h. fullscreen text mód legyen. Mai uefi-s trágya vga csippek se tudják már a textmódot régóta.

Igen, már grafikus, de még mindig van egy olyan alap kék feelingje, fehér karakterekkel. Át is lehet állítani másra, accent color színére. Mindenesetre nyomják még páran a text mode-ot.

Néhány CSM BIOS / UEFI még mindig text mode, főleg inteles-céges gépeken, de abban igazad van, hogy a legtöbb konzumer desktop-mobil gépen már jó ideje grafikus az UEFI. Az Award BIOS hagyományosan ez a Turbo Pascal kék interface volt, az AMI text mode-os viszont inkább szürkés-kékes.

A computer is like air conditioning – it becomes useless when you open Windows.” (Linus Torvalds)

Jah, Basic után nekem is TP, voltam vagy hatodikos, szerettem, állat karakteres progikat fejlesztettem vele. Az asm betét is hasznos volt. Gyorsan jött a Turbo C, na az volt az igazi királyság (asm betéttel ott is). A Turbo Vision felületet azóta is kedvelem. Amúgy én a számtech tanártól kaptam a TurboC-t, nem volt gond a beszerzése :D

program HappyBirthdayTurboPascal;
begin
  writeln('Happy Birthday Turbo Pascal!');
end. 
[Falu.Me]==>[-][][X]

Jaja, de úgy értettem, hogy tpc.exe-vel ... command line-ban :D

Én:

Hogyan kell turbo pascal alatt parancssorban lefordítani egy pascal programot?

ChatGPT:

A Turbo Pascalban való parancssori fordítás lépéseinek általános eljárása a következő:

  1. Nyisd meg a parancssor vagy a DOS ablakot:

    • Az "Start" menüből válaszd ki a "Run" (Futtatás) lehetőséget.
    • Írd be a "cmd" vagy "command" parancsot, majd nyomd meg az Enter billentyűt.
  2. Navigálj a program könyvtárába:

    • Használd az cd parancsot a mappába való navigáláshoz. Például:

       

    • cd C:\TurboPascal\Projects\MyProject

  • Fordítsd le a programot:

    • A Turbo Pascal fordítóprogramja a tpc lehet. Adjuk meg a forrásfájl nevét, majd a lefordított kimeneti fájl nevét. Például:

       

    • tpc MyProgram.pas

    • Ha a Turbo Pascal binárisai nincsenek hozzáadva a rendszer PATH változójához, akkor a teljes elérési utat is meg kell adni a tpc-nek.
  • Futtasd a programot:

    • Miután sikeresen lefordult a program, a kimeneti fájl (például MyProgram.exe) futtatható lesz. Indítsd el a programot a következő paranccsal:

       

    • MyProgram

Ez egy általános eljárás, és a pontos lépések függhetnek a Turbo Pascal verziójától és a használt operációs rendszertől. Az elérési utaknak és a parancsoknak változhatnak a részletei. Ha a Turbo Pascal binárisai nem szerepelnek a rendszer PATH változójában, akkor a Turbo Pascal telepítési könyvtárát is hozzá kell adni a PATH-hoz, vagy használni kell a teljes elérési utat a tpc-hez.

Én:

Linker nem kell hozzá?

ChatGPT:

A Turbo Pascal egy egyszerű fordító és futtató környezet, és általában a fordítás során a linker nélkül is képes előállítani a futtatható állományt. A Turbo Pascal egyetlen tpc (Turbo Pascal Compiler) nevű programot használ a forráskód fordítására.

A tpc maga végzi el mind a fordítási, mind a linkelési feladatokat. A forráskódot közvetlenül lefordítja gépi kódra, és egy futtatható állományt hoz létre.

Ezért a Turbo Pascal alatt a kisebb projektek esetén a linker explicit használata általában nem szükséges. Az egyszerű parancsok (mint például tpc MyProgram.pas) elegendőek a forráskód fordítására és futtatható állomány létrehozására.

Amennyiben összetettebb projektjeid vannak, és több forráskód fájlt használsz, akkor a Turbo Pascal projekt fájlok (.tpu, .tpw, stb.) használata segíthet az egyszerűbb fordításban és projektkezelésben. Ebben az esetben a tpc-t a projekt fájlra (.tpu, .tpw, stb.) való hivatkozással kell indítani.

trey @ gépház

A kék "Pongor Pascal" könyv valakinek megvan? A címe azt hiszem Szabványos Pascal Programozás vagy valami hasonló volt...

Maga a Mester tanított a BME-n. :)

Én a Benkő Tiborné könyvével tanultam meg programozni, szerintem nagyon jó volt. Mire egyetemre kerültem, már elég jól ment, a Pongornál vizsgáztam, de egyetlen előadásán sem voltam, nem volt rá szükségem. Viszont a Benkőnéhez jártam C-re, azt élveztem, tök jó fej volt :)

Engem is tanított. Sajnos pont abban a félévben hunyt el, amikor nála tanultam. Pontosabban nem is tanultam, mert lebeszéltem vele, hogy előtanulmányaim miatt (+OSZTV 1. helyezés miatt) előelővizsgázhassak a tárgyból 2 hét múlva vizsgaidőszakban. 1,5 múlva hunyt el, ha jól emlékszem.
Aztán jött Vitéz, aki mindenkit megszivatott. Igazi mintapéldánya volt a beképzelt, öntelt, rosszindulatú, oktatni nem tudó, a "na, vajon mit nem tudsz?"-ra kíváncsi egyetemi oktatóknak.

turbo pascal, de aztán turbo vision... menő gui-s appokat lehetett benne írni...

A gyerekek mindennek adnak gúnynevet. Ennek túrós pacal volt. A basic-et nem írom le. :D

Első programozási nyelv, amin ténylegesen programoztam. Előtte BASIC-eztem valamennyit, de ég és föld volt a kettő.

Igazából akkor nem tudtam értékelni (nem volt viszonyítási alapom), de eszméletlenül jól összerakott környezet volt a maga idejében. Gyorsan fordított, meg a belső debuggere is jól működött. Ott volt előtted az online help-ben a teljes referencia is.

Kár a Borland-ért!

egavga.bgi :)

Köszönöm azokat a csodálatos éveket!
Boldog szülinapot!

a (Q)BASIC után ez volt, amiben megtanultam a programozás alapjait - valahol talán van még egy kupac floppy (esetleg CD), amin ezek a régi 'próbálkozásaim' mentve vannak/voltak :) - érdekes lenne mai szmmel megnézni miket alkottam akkoriban :D

azért szerintem a létjogosoltsága ma már kérdéses... 

arról nem is beszélve, hogy amit akkoriban szuper instpirálónak találtunk, az ma már a szuper gagyi.

Emiatt nincs is inspiráió, hogy órákat 'küzdjenek' azért, hogy egy labda pattogjon két fal között :D

Sőt, vannak akik szerint teljesen felesleges bármilyen alacsonyszintű meg utasításorinteált nyelvvel foglalkozni.

Én is sokáig nyomtam így, és viszonylag későn tanultam csak meg assembly-t, de olyan dolgokat értettem meg általa, amit anélkül soha a büdös életbe nem tudtam volna. Egyszerűen megvilágosodik az ember, hogy a C miért olyan amilyen, és a C utasítások mögé már oda tudod képzelni a gépi kódot.

Ja, amúgy a Pascal után a C nekem kb. hétvége volt. Ennek oka, hogy középiskolai (egyébként nagyon jó) infó tanárunk szigorúan PROGRAMOZNI akart minket tanítani, és nem a nyelvre magára. Amikor elkezdtük a programozást, hetekig a gépet be sem kapcsolhattuk, csak papíron dolgoztunk.

Lehet hogy ma már nem olyan divatos a Pascal, de hogy az utasításorinentált programozást ne lehetne benne tökéletesen megtanulni, az nem igaz. Sőt, ugye a TP már OOP-t is tudott, ha valaki nagyon akarta.

Mindegy, a mai szoftverfejlesztést szerintem ez nagyon jól megvilágítja:

https://xkcd.com/1988/

:)

Pont az a baj, hogy sokan gondolják így - szerintem hibásan -, így kimaradnak az alapok, és lóf@szt sem ér az ember a végén programozóként, mert Ő Python-ban meg C#-ban tanult egymillió lib használatával és önállóan egy  egyszerű rendezést vagy (uram bocsá' lineáris) keresést sem tud megírni, ha az XYZ lib adott objektumának nincs ilyen metódusa "gyárilag"...

Hiába van modern nyelv, AI kódsegéddel meg automata GC-vel, ha nem érti a user (itt: programozó) hogyan működik, ugyan olyan szar programot ír benne, mint a segédek nélküli nyelven. És ezt láthatjuk is nap mint nap, hogy a sok fogalmatlan, magát programozónak nevező mi hulladékot gyárt millió sor szám.

Nekem van egy olyan gondolatom is, hogy a Rust is azért tör előre, mert a sok alkalmatlan kódert meg tudja óvni bizonyos hibák elkövetésétől. Egy igazán jó programozónak messze nem segít annyit, mint azt sokan állítják. Ahogyan a JS is nagyon népszerű lett a típusosság hiánya (bosszantó compiler hibaüzenetek amiket nyomozni kell) miatt, aztán kiderül, hogy szívás a típusosság hiánya, csak a nem-programozókkal hiteti el ideig-óráig, hogy programozók.

Az egyre gyengülő képességű kóder társadalomnak készülnek az egyre "modernebb", egyre töb dolgot automatizáló nyelvek. Okos programozók írják buta programozóknak ezeket...
Az okos programozó meg egészen valószínű mai mércével nehéz nyelvvel kezdett anno (gépi kód, C, ezekhez képes luxus objektumos Pascal vagy C++, satöbbi).

még talán a 'nagy' Turbo Pascal könyv is megvan valahol... Aminek már csak a mérete is elriasztaná  mai fiatalokat :D

Én meg akkoriban (gyerekként!) saját (zseb)pénzemből vásároltam, és többször oda-vissza kiolvastam... internet híján más lehetőség nem is nagyon volt, hogy megtanulj valamit.

Kedvenc nyelvem a mai napig!

A 80-as évekbeli Commodore 16-os BASIC után jött a PC-s korszak, nekem egy 80186 CPU-val, egy 5.25"-os floppyval. Ez Stacker 3.0-val formázva 2 MB-ra, amin elfért a Turbo Pascal 5.5 IDE. Évekig volt ez a tanulós felállásom, mire kb. 93-ban sikerült két doboz 5.25" floppy-t elcserélnem egy 40 MB-os MFM HDD-re vezérlővel. Onnantól bőven volt gyors tárolóhely. :-D

Az újabb TP-ok után triviális volt Delphi-re váltani. De aztán nem lettem programozó, valahogy az üzemeltetésbe csöppentem mikor kezdődött anagybetűs élet (értsd: el kellett kezdeni pénzt keresni). Viszont amikor kellett "rendes" programot írni sok évvel később, és már akkor sem voltam a "letorrentezek egy Delphi-t" híve, jött a Free Pascal és a Lazarus. Tudom, messze nem a leghasználhatób (pláne nem modern) környezet és nyelv, de otthon éreztem magam, és meg tudtam írni benne, amit kellett.

Én kihagytam. 

Atari Basic után Qbasic, de azt nem szerettem annyira, mert nem lehetett változóval paraméterezni a GOTO parancsot. Az meg milyen szánalmas már, hogy előre meg kell határozni, hogy merre mehet a program.

Ezért aztán Borland C++ volt a folytatás, ott volt rá egy trükköm, asm betéttel tudtam oda ugrani ahova akartam, valós mód for president. Mondjuk a programozó suliban heveny idegrángást kaptak, amikor egy beadandómban megtudták, hogy a code szegmensre is futás közben írom a byteokat, mert az önmódosító kóddal így meg tudtam spórolni néhány másodpercet. 40-60 MHz -es procikon igenis volt értelme a dolognak, bár az állapotgépben nem lehetett slendriánkodni, az hétszentség.

Próbáltam a Pascalt, de sokat kellett benne gépelni, (begin end a { } helyett, mi vagyok én gépírónő?) és hát rohadt nehéz volt állandóan kikerülni a védelmi hülyeségeit. Volt valami gepasz a farjump, vagy longjump körül is, már nem tudom, hogy mit tiltottak elvi okokból, na arra is asm -olni kellett. Az meg milyen már, hogy állandóan workaroundoljam a nyelv hiányosságait? Naugye.

Még Turbo Pascal 3.0-val kezdtem Pascalozni (annak még nem volt beépített helpje, bár az is képes volt az editorból elindítani a fordítást és a programot. Gyakorlatilag ugyanaz a felület működött a PC-n illetve a CP/M alatti 2.x verzióban (később abból is meg tudtam szerezni a 3.0 verziót, akkor tudtam otthon előkészíteni azt, amit aztán a PC-n megcsináltam (akkoriban otthon még csak C128-am volt, ez valamikor '88-89-ben volt)

Ehhez képest a TP 4.0 verzió nagy ugrás volt a beépített helppel, és a sokkal kényelmesebb menürendszerével.

Szeretem a Pascalt, logikus, könnyen tanulható nyelv, a Turbo Pascal meg egy nagyon jó megvalósítás volt, gyorsan fordított és a lefordított program is kellően kicsi és gyors volt. Delphi korára már kicsit elhízott, ott már nem működött olyan jól az ún 'smart linking'.

C64 BASIC utan egy megvaltas volt :D Aztan ahogy jott a C, ugy a Pascalt is elegge lesajnaltam

Én nem sokat használtam a Türhő Pacal-t és akkor még nem tudtam, hogy kell egy problémát felbontani, de amikor PLC-re Structured Text-ben kezdtem el írni egy nagyobb programot, kicsit előjöttek az emlékek :D

Az Angster-Kertész könyvek fenomenálisak.

A nagyobbik fiam szintén programozónak tanul (most jár technikumba), de még amíg általános iskolás volt, megvettem neki antikváriumból mind a négy, a fotódon látható Angster(-Kertész) kötetet: a feladatgyűjtemény két kötetét, és a főiskolai tankönyv két kötetét. (Nekem korábban a feladatgyűjtemény volt csak meg, de az évtizedek alatt elkallódott.) Rengeteget bújta, bújja ezeket a könyveket. A tartalmuk nagyon nagy része aktuális ma is, a DOS-os "anakronizmusokat" pedig nem nehéz elmagyarázni.

A feladatgyűjtemény programjai a közelmúltig letölthetők voltak (!) Angster Erzsébet honlapjáról (a link a magyar wikipedia szócikkére mutat; a honlap talán már nem elérhető). A karakterkódolási problémáktól eltekintve, ill. azokat megoldva, teljesen jól használhatók freepascal / lazarus alatt.

(A fiam azóta átnyergelt -- részben a technikumi tananyag miatt -- más nyelvekre, de ennek ellenére a mai napig nagyszerű indulásnak tartom a Pascal-t. Én fontosnak tartom, hogy az ember hamar megismerkedjen a mutatókkal, és a Pascal az a nyelv, amelyben vannak mutatók, de a nyelv mégsem annyira meredek, mint a C.)

Még egy könyv, ami nekem nagyon bejött 30 éve: Pirkó Józseftől a "Turbo Pascal 5.5"; ennek a fekete címlapja a mai napig él az emlékezetemben (linkek pl: https://www.antikvarium.hu/konyv/turbo-pascal-55-186618-0 , https://moly.hu/konyvek/pirko-jozsef-turbo-pascal-5-5).

A Pirkó nekem is megvolt, de egy másik, LSI-s kiadásban, aminek ilyen szivárványos logó volt az elején, de egy korábbi kiadás, amiben nem volt még windowsos cucc, csak DOS-os. Az Angster-féle Turbo Bascal 6.0 és Pascal-alapú Programozás I-II is megvolt, de az már később, amikor nem volt rá szükségem annyira, azokból fater tanult a GDF-en. Amivel még sokat nyomtam az Erhard Hertrich: Turbo Pascal 6.0 referencia kézikönyv, kis alakos zsebkönyv. Illetve ami még megvolt, az a Somlai Gábor - Szilvásy Gergely - Adamát Lajos: Turbo Vision mint OOP alkalmazás (link).

Az első Pascal könyvem pontos címére nem emlékszek, nem találom a neten sehol. Az nem is Turbo, hanem még valami korai Pascal volt, nagy alakos, nagyon vastag könyv, sok példaprogrammal, zöld borítója volt, valami párhuzamos keretes motívummal, németes nevű szerző, magyarra fordított könyve. Még 1991-ben járt nálam egy rövid időre, azért nem emlékszek rá. Aki emlékszik rá, megírhatná a címét, vagy adhatna hozzá linket.

Illetve volt egy másik jó könyv, a Köpeczi-féle, folyamatábrák, rövid programok, de a tömörsége ellenére nagyon jól magyarázott, az egyik legjobb kezdőknek írt könyv, amit láttam. Nem főiskolai-egyetemi jegyzet, hanem közoktatásba szánt tankönyv. A tanuljunk X nyelvet 24 óra alatt kiadvány tagjai szoktak még sokszor jók lenni pedagógiailag, teljesen kezdőknek, programozási alapok letételére, tömörek, bullshit mentesek, mégis könnyen érthetőek, rövid, mégis működő példakódokkal.

A computer is like air conditioning – it becomes useless when you open Windows.” (Linus Torvalds)