Dynamická datova štruktúra – Pascal – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Dynamická datova štruktúra – Pascal – Fórum – Programujte.comDynamická datova štruktúra – Pascal – Fórum – Programujte.com

 

doma22
~ Anonymní uživatel
94 příspěvků
28. 1. 2021   #1
-
0
-

Keď by sa niekto našiel, čo by my vedel poradiť, pri dynamickej datovej štruktúre. Pochopil som, že pri statickej datovej štruktúre je už pri tvorbe programu presne určené aká bude veľká, kým pri dynamickej sa o veľkosti rozhoduje pri behu programu. No mám tu však dva príklady na dynamickú, ale ani jeden nerobí čo má. Programy sa dajú kompilovať, teda preložiť, ale robia si čo chcú. Nedávajú frontu, nerušia frontu, nedávajú zásobník, proste okrem skončenia a vypísania hlásení, nerobia nič. No ja neviem prečo to robia, nechápem kde je chyba ani ako ju napraviť, bol by som rád ak by mi niekto helfol s oboma programami. Tu je PRVÝ PROGRAM:

Program Zasobnik1;

type Nick = ^Naboj;
     Naboj = record
       ostry : char;
       dalsi : Nick;
     end;

var zasobnik, strela : Nick;
    i : integer;
    koniec : string;
    akcia : char;

begin
  {vytvorenie zásobniku}
  zasobnik:=nil;
  repeat
    writeln('Stlacte klávesu a potom enter. Strelba: s, Plnenie: p.');
    readln(akcia);
    case akcia of
      's':
          begin
            if zasobnik = nil then
              writeln('Nick, más prázdny zásobnik.')
            else
            begin
              writeln('Strielame.');
              strela:=zasobnik;
              zasobnik:=zasobnik^.dalsi;
              dispose(strela);
            end;
          end;
      'p':
          begin
            writeln('Plníme.');
            new(strela);
            strela^.dalsi:=zasobnik;
            strela^.ostry:='l';
            zasobnik:=strela;
          end;
      else writeln('Vyckavame.');
    end;
    writeln();
    write('Stav zásobniku: ');
    strela:=zasobnik;
    while strela <> nil do
    begin
      write(strela^.ostry);
      strela:=strela^.dalsi;
    end;
    writeln();
    writeln('Ak chcete skoncit, napitte konec a stlacte enter');
    writeln('Pre pokracovanie stlacte iba enter');
    readln;
    read(koniec);
  until koniec = 'koniec';

  {rusenie zásobniku}
  strela:=zasobnik;
  while strela <> nil do
  begin
    zasobnik:=zasobnik^.dalsi;
    dispose(strela);
    strela:=zasobnik;
  end;

  writeln('Zostalo nieco v zásobniku?');
  write('Stav zásobniku: ');
  strela:=zasobnik;
  while strela <> nil do
  begin
    write(strela^.ostry);
    strela:=strela^.dalsi;
  end;
  dispose(zasobnik);
  writeln('Pre skoncenie programu stlacte enter');
  readln;
end.

a tu je DRUHÝ PROGRAM

Program Obchod1;

type Nick = ^Clovek;
     Clovek = record
       meno: integer;
       dalsi: Nick;
     end;

var zaciatok, koniec: Nick;
    PlatiaciClovek: Nick;
    ukoncit:String;
    akcia : char;
    poradie: integer;

begin
  new(zaciatok);
  koniec:=zaciatok;
  poradie:=1;
  repeat
    writeln('Stlacte klávesu a stlacte enter. Novy vstup: n, Vystup: v.');
    readln(akcia);
    case akcia of
    'n':
      begin
        koniec^.meno:=poradie;
        poradie:=poradie+1;
        new(koniec^.dalsi);
        koniec:=koniec^.dalsi;
      end;
    'v':
      begin
        if zaciatok = koniec then
          writeln('fronta je prazdná.')
        else
        begin
          PlatiaciClovek:=zaciatok;
          zaciatok:=zaciatok^.dalsi;
          dispose(PlatiaciClovek);
        end;
      end
    else writeln('Fronta stoji.');
    end;
    write('Fronta: ');
    if zaciatok <> koniec then
    begin
      PlatiaciClovek:=zaciatok;
      repeat
        writeln(PlatiaciClovek^.meno, ' ');
        PlatiaciClovek:=PlatiaciClovek^.dalsi;
      until PlatiaciClovek = koniec;
    end;
    writeln('Ak chcete skoncit, napiste koniec a stlacte enter, ak chcete iba pokracovat stlacte iba enter');
    readln();
    read(ukoncit);
  until ukoncit = 'koniec';

  {rusenie fronty}
  if zaciatok <> koniec then
  begin
    PlatiaciClovek:=zaciatok;
    repeat
      PlatiaciClovek:=zaciatok;
      zaciatok:=zaciatok^.dalsi;
      dispose(PlatiaciClovek);
      PlatiaciClovek:=zaciatok;
    until PlatiaciClovek = koniec;
  end;

  writeln('Zostal niekdo v fronte?');
  write('Fronta: ');
  if zaciatok <> koniec then
  begin
    PlatiaciClovek:=zaciatok;
    repeat
      write(PlatiaciClovek^.meno, ' ');
      PlatiaciClovek:=PlatiaciClovek^.dalsi;
    until PlatiaciClovek = koniec;
  end;

  readln;

  dispose(zaciatok);
  writeln('Pre skoncenie programu stlacte enter');
  readln();
end.

Obidva programy sú na príklad dynamickej datovej štruktúry

Nahlásit jako SPAM
IP: 178.143.101.–
gna
~ Anonymní uživatel
1891 příspěvků
29. 1. 2021   #2
-
0
-

Problém je v tom dotazování na konec.

readln;
read(koniec);

Na vstupu ti zůstane Enter a pak se v dalším průchodu načte při volbě akce. Dej tam jen readln(koniec);

A potom když končíš, tak celý zásobník nejdřív zrušíš a pak ho vypisuješ.

Nahlásit jako SPAM
IP: 213.211.51.–
doma22
~ Anonymní uživatel
94 příspěvků
29. 1. 2021   #3
-
0
-

#2 gna
To s readln; mám dať do 54 riadku, alebo až na úplný koniec, teda do 84 riadku a to s tým zásobníkom som asi nepochopil, ako mám dať zásobník na začiatok, teda na 16 riadok?

Nahlásit jako SPAM
IP: 178.143.101.–
gna
~ Anonymní uživatel
1891 příspěvků
30. 1. 2021   #4
-
0
-

Tam, kde je read(koniec) místo toho dej readln(koniec); A nechápu význam toho readln na řádku před tím, ten bych úplně vyhodil.

Potom, za tím cyklem, máš rušení zásobníku a výpis zásobníku. Po zrušení není co vypisovat.

Nahlásit jako SPAM
IP: 213.211.51.–
doma22
~ Anonymní uživatel
94 příspěvků
30. 1. 2021   #5
-
0
-

#4 gna
Aha už rozumiem, riadok read(ukoncit); upraviť na readln(ukoncit); pochopil som to správne? A ten readln() som tam dal preto, že ak som ho tam nemal, tak mi nechcel pc ukončiť cyklus until, nebudem po odstránení tohto readln mať zase ten problém? No a pri rušení, zase aby to malo vôbec zmysel, tak by som to mal umiestniť na začiatok programu, nie na koniec, pochopil som to správne? Ešte som sa chcel spýtať, či ak zadám pri rušení 0, tak sa mi fronta zruší, proste do fronty zadávam čísla, je to správne?

Nahlásit jako SPAM
IP: 178.143.101.–
doma22
~ Anonymní uživatel
94 příspěvků
30. 1. 2021   #6
-
0
-

#4 gna
Ja som v reakcii pozeral na ten druhý program, kde je miesto koniec ukoncit, ale vlastne tie isté korekcie platia aj pre prvý program, dobre som to pochopil?

#4 gna
Aha už rozumiem, riadok read(ukoncit); upraviť na readln(ukoncit); pochopil som to správne? A ten readln() som tam dal preto, že ak som ho tam nemal, tak mi nechcel pc ukončiť cyklus until, nebudem po odstránení tohto readln mať zase ten problém? No a pri rušení, zase aby to malo vôbec zmysel, tak by som to mal umiestniť na začiatok programu, nie na koniec, pochopil som to správne? Ešte som sa chcel spýtať, či ak zadám pri rušení 0, tak sa mi fronta zruší, proste do fronty zadávam čísla, je to správne?

Nahlásit jako SPAM
IP: 178.143.101.–
gna
~ Anonymní uživatel
1891 příspěvků
30. 1. 2021   #7
-
0
-

Ano, v obou programech máš stejný problém. Pokud rozdíl mezi read a readln nechápeš, tak prostě všechno zadávej po řádcích a načítej pomocí readln.

Rušení nepřesunuj na začátek, kde není co rušit. Jen píšu, že po tom rušení máš ještě výpis, který nemá co vypsat.

Nahlásit jako SPAM
IP: 213.211.51.–
doma22
~ Anonymní uživatel
94 příspěvků
31. 1. 2021   #8
-
0
-

#7 gna
Viem aký je rozdiel medzi read a readln, read znamená čítať, teda pc si riadok prečíta a tým to hasne, na monitore nič nevidí ani nič neukladám, readln zase ukladá, čaká na príkaz, prípadne prečíta, čo som napísal keďže ln je skratka pre line, teda riadok. Problém je v tom, že ako náhle vypustím pôvodný zápis a nahradím ho zápisom readln(ukoncit/koniec); tak buď sa mi cyklus repeat - until neukončí vôbec a do nekonečna rieši frontu/zásobník, alebo sa to občas nejakým zázrakom, neviem akým, ukončí po asi 15 - 20 krát zadaní slova koniec, rušenie momentálne neriešme, keďže asi som veľmi nepochopil o čom ste hovorili, ale to nie je podľa mňa základný problém programu, ako prvé by som aspoň podľa mňa mal vyriešiť frontu/zásobník.

Nahlásit jako SPAM
IP: 178.143.101.–
gna
~ Anonymní uživatel
1891 příspěvků
1. 2. 2021   #9
-
0
-

read(char) - Načte libovolný znak.
read(string) - Načte znaky do konce řádku. (Znaky nad maximální délku stringu se tiše přeskočí.) Samotný ukončovač řádku se nenačte a zůstává na vstupu.
read(integer|real) - Přeskočí bílé znaky na začátku a načte číslo ukončené bílým znakem. (Pokud je číslo ve špatném formátu, tak se vyhodí chyba.) Ukončovací znak se nenačte a zůstavá na vstupu. Bílé znaky jsou mezera/tabulátor/konec řádku.

readln - Udělá read a pak přeskočí na další řádek (tj. přeskočí data do konce řádku i následující ukončovač řádku)

Problém je v tom, co po čtení zůstává nezpracováno na vstupu a půjde do dalšího čtení.

Takže modelový příklad: 

// první průchod cyklem:
readln(char);    // zadám: X<Enter> -- OK, načte znak 'X' a přeskočí na další řádek
read(string);    // zadám: HAHA<Enter> -- OK, načte string 'haha', na vstupu zůstává <Enter>

// další průchod:
readln(char);    // Err, načte znak <Enter> z minula a čeká na další řádek, který přeskočí

Už v prvním průchodu můžeš být ve stejné situaci, pokud rovnou zadáš jen <Enter>. V obou případech jsi ztracený v tom, kam co zadáváš a program se chová divně.

Jednoduché řešení, jak se do toho nezamotat, je používat jen readln(string|cislo) pokud nic víc nepotřebuješ.

Nahlásit jako SPAM
IP: 213.211.51.–
doma22
~ Anonymní uživatel
94 příspěvků
1. 2. 2021   #10
-
0
-

#9 gna
Tak do hĺbky odborné materiále ( kniha i podklady z interetu ), ktorú som kúpil ,a ktoré som zohnal z netu pri read nejde, takže diky za hlbšie vysvetlenie read, upravil som prvý program podľa Vašich rád, ale stále mi nechce ukončiť cyklus s príkazom koniec, fakt neviem ako na to, už som zúfalí, keďže dva dni to upravujem, mažem a pridávam riadky, ale stále nie a nie ukončiť cyklus príkazom koniec, dávam tu najčerstvejšie upravený program, ktorý plní zásobník, ale nechce zobrať príkaz koniec, prosím Vás kde je tam ešte chyba ( Rušenie potom ):

Program Zasobnik1;

type Nick = ^Naboj;
     Naboj = record
       ostry : char;
       dalsi : Nick;
     end;

var zasobnik, strela : Nick;
    i : integer;
    koniec : string;
    akcia : char;

begin
  {vytvorenie zásobniku}
  zasobnik:=nil;
  writeln('Stlacte klávesu a potom enter. Strelba: s, Plnenie: p.');
  repeat
    readln(akcia);
    case akcia of
      's':
          begin
            if zasobnik = nil then
              writeln('Nick, más prázdny zásobnik.')
            else
            begin
              writeln('Strielame.');
              strela:=zasobnik;
              zasobnik:=zasobnik^.dalsi;
              dispose(strela);
            end;
          end;
      'p':
          begin
            writeln('Plníme.');
            new(strela);
            strela^.dalsi:=zasobnik;
            strela^.ostry:='l';
            zasobnik:=strela;
          end;
      else writeln('Vyckavame.');
    end;
    writeln();
    write('Stav zásobniku: ');
    strela:=zasobnik;
    while strela <> nil do
    begin
      write(strela^.ostry);
      strela:=strela^.dalsi;
    end;
    writeln();
    writeln('Ak chcete skoncit, napiste konec a stlacte enter');
    readln(koniec);
  until koniec = 'koniec';

  {rusenie zásobniku}
  strela:=zasobnik;
  while strela <> nil do
  begin
    zasobnik:=zasobnik^.dalsi;
    dispose(strela);
    strela:=zasobnik;
  end;

  writeln('Zostalo nieco v zásobniku?');
  write('Stav zásobniku: ');
  strela:=zasobnik;
  while strela <> nil do
  begin
    write(strela^.ostry);
    strela:=strela^.dalsi;
  end;
Nahlásit jako SPAM
IP: 178.143.101.–
gna
~ Anonymní uživatel
1891 příspěvků
1. 2. 2021   #11
-
0
-

Mně to funguje :-) Dej si za ty ready ještě výpis, třeba to něco odhalí.

readln(akcia);
writeln('akcia >>', akcia, '<<');
...
readln(koniec);
writeln('koniec >>',koniec,'<<');
Nahlásit jako SPAM
IP: 213.211.51.–
doma22
~ Anonymní uživatel
94 příspěvků
1. 2. 2021   #12
-
0
-

#11 gna
Neviem, skúsim, ono je zase pravda, že cca pred 2 - 3 mesiacmi mi úplne spadol windows a musel som obnovovať registre cez technickú podporu mikrosoftu a že antivirak mi potom našiel i trojana, takže možno túto šarapatu robí OS, keďže to mohlo mať i po obnovení systému a vyčistenia od vírusu i nejaké dôsledky, je to možné, že program od paskalu je ok, neviem no, skúsim teda ešte tie korekcie

Nahlásit jako SPAM
IP: 178.143.101.–
doma22
~ Anonymní uživatel
94 příspěvků
2. 2. 2021   #13
-
0
-

#11 gna
Skúsil som úpravy, ale nič, no ak som napísal program do Lazarusu, bez writeln('akcia >>', akcia, '<<');...., tak všetko ide, takže považujem to za úspech a beriem to tak, že program je funkčný a zvládol som ho a veľmi pekne Vám ďakujem za pomoc, ale ešte keď by som Vás mohol porosiť a ak by ste boli taký dobrý a vysvetlili mi ako ste to mysleli s tým zásobníkom/frontou, že je tam výpis, ktorý nemá čo vypísať, ak by ste mi to vysvetlili

Nahlásit jako SPAM
IP: 178.143.117.–
gna
~ Anonymní uživatel
1891 příspěvků
2. 2. 2021   #14
-
0
-

Pokoušíš se vypsat obsah zrušeného zásobníku. Nevím, jestli je to pro kontrolu, že rušení funguje, nebo je to omyl a výpis měl před rušením.

repeat
...
until ...

{rusenie zásobniku}
...

writeln('Zostalo nieco v zásobniku?');
...
Nahlásit jako SPAM
IP: 213.211.51.–
doma22
~ Anonymní uživatel
94 příspěvků
3. 2. 2021   #15
-
0
-

#14 gna
Ďakujem, že ste mi odpísali. Ono čo sa týka zásobníku, tak v podstate je tam preto, že bol uvedený v samotnom zdrojovom kóde v knihe, čo som si kúpil - Programování pro úplné začátečniky - , ale teda ak som to pochopil správne, tak vlastne tam ani nemusí byť, ak by som zásobník vystrieľal? A ešte som sa chcel spýtať ohľadne zásobníka/fronty, že ako prejdem do neho, tak pc v druhom kroku po spomenutom riadku - writeln('Zostalo nieco v zásobniku?'); - , čaká na potvrdenie. Ja stlačím enter, aby som sa vyhol problémom, ale chcel som sa opýtať, že ak by som tam zadal číslo, či by program nespadol, alebo ako by potom program naložil s týmto údajom pri rušení zásobníku/fronty, prípadne ak by som zadal nejakú možnosť z case ( p, s, n, v ) a potvrdil ju enterom, ako by zareagovalo na to rušenie, alebo ak by som tam zadal iný znak ( písmeno, reťazec a podobne ) ako by na to zareagovalo rušenie

Nahlásit jako SPAM
IP: 178.143.117.–
gna
~ Anonymní uživatel
1891 příspěvků
3. 2. 2021   #16
-
0
-

Rušení tam samozřejmě zůstane. Když dynamicky alokuješ paměť, tak ji potom musíš taky uvolnit. (Teda nemusíš, protože na všech moderních systémech se paměť alokovaná programem při jeho ukončení automaticky uvolní, takže v tomhle konkrétním případě na tom nesejde, ale jindy třeba jo.)

To, co o tom rušení píšu je, že zásobník nejdříve rušíš a pak ho vypisuješ. Po zrušení není co vypisovat. Možná to tak máš schválně, ale nedává to smysl. Nevím, co je na tom k nepochopení.

Za tím 'Zostalo nieco v zásobniku?' nevidím nic, co by mělo čekat na nějaké potvrzení, takže netuším o čem mluvíš. Jestli tam máš další readln, tak jsem ti už popsal, jak funguje a není snad problém to prostě zkusit.

Nahlásit jako SPAM
IP: 213.211.51.–
doma22
~ Anonymní uživatel
94 příspěvků
3. 2. 2021   #17
-
0
-

#16 gna
V prvom programe ( to je - Zasobnik1 ), za výpisom Zostalo nieco v zasobniku? program automaticky skočí na posledný výpis, ale v druhom programe ( to je - Obchod ), za výpisom Zostal niekto v fronte? program skočí na ďalší riadok ( to je - Fronta: ) a čaká na potvrdenie, preto som sa pýtal na to, čo by sa stalo ak by som tam napísal spomenuté veci, potom ich potvrdil enterom a ako by na to zareagoval program. 

Program Obchod;

{$mode objfpc}{$H+}

uses
  {$IFDEF UNIX}{$IFDEF UseCThreads}
  cthreads,
  {$ENDIF}{$ENDIF}
  Classes
  { you can add units after this };

type Nick = ^Clovek;
     Clovek = record
       meno: integer;
       dalsi: Nick;
     end;

var zaciatok, koniec: Nick;
    PlatiaciClovek: Nick;
    ukoncit:String;
    akcia : char;
    poradie: integer;

begin
  new(zaciatok);
  koniec:=zaciatok;
  poradie:=1;
   repeat
    writeln('Stlac klavesu a stlac enter. Novy vstup: n, Vystup: v.');
    readln(akcia);
    case akcia of
    'n':
      begin
        koniec^.meno:=poradie;
        poradie:=poradie+1;
        new(koniec^.dalsi);
        koniec:=koniec^.dalsi;
      end;
    'v':
      begin
        if zaciatok = koniec then
          writeln('fronta je prazdna.')
        else
        begin
          PlatiaciClovek:=zaciatok;
          zaciatok:=zaciatok^.dalsi;
          dispose(PlatiaciClovek);
        end;
      end
    else writeln('Fronta stoji.');
    end;
    write('Fronta: ');
    if zaciatok <> koniec then
    begin
      PlatiaciClovek:=zaciatok;
      repeat
        writeln(PlatiaciClovek^.meno, ' ');
        PlatiaciClovek:=PlatiaciClovek^.dalsi;
      until PlatiaciClovek = koniec;
    end;
    writeln('Ak chces skoncit, napiste koniec a stlac enter');
    writeln('Ak chces pokracovat, stlac enter');
    readln(ukoncit);
  until ukoncit = 'koniec';

  {rusenie fronty}
  if zaciatok <> koniec then
  begin
    PlatiaciClovek:=zaciatok;
    repeat
      PlatiaciClovek:=zaciatok;
      zaciatok:=zaciatok^.dalsi;
      dispose(PlatiaciClovek);
      PlatiaciClovek:=zaciatok;
    until PlatiaciClovek = koniec;
  end;

  writeln('Zostal niekdo v fronte?');
  writeln('Fronta: ');
  if zaciatok <> koniec then
  begin
    PlatiaciClovek:=zaciatok;
    repeat
      write(PlatiaciClovek^.meno, ' ');
      PlatiaciClovek:=PlatiaciClovek^.dalsi;
    until PlatiaciClovek = koniec;
  end;

  readln;

  dispose(zaciatok);
  writeln('Pre skoncenie programu stlac enter');
  readln();
end.            
Nahlásit jako SPAM
IP: 178.143.117.–
doma22
~ Anonymní uživatel
94 příspěvků
3. 2. 2021   #18
-
0
-

#16 gna
To je posledná vec, čo mi nie je jasná, inak som už zvyšok pochopil a dynamické datové štruktúry uzavrel. Ďakujem za vysvetlenie prečo je v učebnici toto rušenie, keďže sám som nechápal na čo to tam vlastne je, keďže v knihe sa k rušeniu nijak extra nevyjadrovali, takže rušenie je tam v podstate z archaických dôvodov, keďže moderné programy už po ukončení alokujú pamäť, len ešte by som bol rád ak by ste mi vysvetlili, čo by sa stalo s týmto druhým programom ak by som urobil už spomenuté veci, či by sa to nejak prejavilo na chode programu

Nahlásit jako SPAM
IP: 178.143.117.–
JerryM0
Věrný člen
4. 2. 2021   #19
-
0
-

"....moderné programy už po ukončení alokujú pamäť, ..." ??? ne ne to je blbost, např. u C# existuje tzv. GarbageCollector a ten se stará o uvolnění nepotřebné paměti. Ne každý moderní programovací jazyk má GarbageCollector, třeba C++/CX ho nemá atd. Uvolňování paměti je na tobě. Pokud si v dřívějších dobách při programování v C/C++ nebo Pascalu neuvolnil paměť, tak se obvykle zhroutil celej operační systém.

V Pascalu existují příkazy  Mark a Release

https://www.trsek.com/pascal/Mark

na zaznamenání stavu haldy a je to určený pro mamlase co neumí správně napsat kod a správně alokovat a uvolnovat pamět. Mark ti zaznamená stav haldy a release uvolní vše co přišlo po záznamu příkazem mark.

navíc pascal umožňuje pracoval s ukazatelem typu NIL a tím se vše hodně zjednodušší. pascal ještě nemá inteligentní ukazatele (Handle) jako C#

a tohle máš napsaný špatně

repeat PlatiaciClovek:=zaciatok;
    zaciatok:=zaciatok^.dalsi;
    dispose(PlatiaciClovek);
    PlatiaciClovek:=zaciatok;
until PlatiaciClovek = koniec;

pochop že řádek zaciatok:=zaciatok^.dalsi; ti v posledním cyklu bude ukazovat na "neznámou paměť" mimo pracovní segment tvýho programu.

tady máš nějaký příklady

https://uloz.to/file/sXhQ12CJ7srI/pascal-priklady-zip

Nahlásit jako SPAM
IP: 109.81.214.–
gna
~ Anonymní uživatel
1891 příspěvků
4. 2. 2021   #20
-
0
-

#18 doma22
Aha, ona jak je ta diskuze dlouhá, tak se v tom trochu ztrácím. Ten readln jen přeskočí řádek, tj. čeká na enter a nezáleží na tom, co zadáváš.

A Jerry má pravdu s tou frontou. Ty tam jakoby děláš 2 kroky a tím se ti to rozbije.

Nahlásit jako SPAM
IP: 213.211.51.–
doma22
~ Anonymní uživatel
94 příspěvků
4. 2. 2021   #21
-
0
-

#20 gna
Ďakujem za odpoveď, chcel som už len vedieť, či by to malo nejaký vplyv konkrétnom príklade, to čo som spomenul, ale teda nemalo. Takže ešte raz ďakujem. Len teraz som z toho, čo píše JerryM tak trochu neistý. Teda pochopil som to zle s tou alokáciou? Chápem to zatiaľ tak, že rušenie zásobníku je tam pre uvoľnenie pamäte, čo viac menej je už tak trochu archaická vec, keďže dnešné programy toto už riešia, i keď chápem, že samozrejme nie všetky, ale teda i keď samozrejme existujú i dnes výnimky, tak vo väčšine prípadov to nie je nutné. Chápem to teda zle s tým rušením, je v podstate je tento mysliaci pochod v poriadku, alebo je to úplne zle?

Nahlásit jako SPAM
IP: 178.143.117.–
JerryM0
Věrný člen
4. 2. 2021   #22
-
0
-

#21 doma22
dnes je to s alokací paměti stejně, platí stejná pravidla jako dřív ale rozdíl je v tom, že dnes už ti špatně alokovaná/neuvolněná paměť nezhroutí celej operační systém. spadne jenom tvoje aplikace. uvolnění zabrané paměti je tedy povinnost stejně jako dřív u programovacích jazyků jako je C nebo C++ (nebo i FreePascal/Lazarus). je to individuální. dokonce i v C# musíš za jistých okolností paměť uvolňovat přiřazením hodnoty null.

jestli to máš jenom do školy tak na to hoď bobek a nauč se jen to co potřebuješ ale tohle vam mel vysvetlit pan ucitel a asi na to taky hodil bobek

takhle bys uvolnil pamet postupne pokud bys pouzival NIL pro posledni prvek seznamu:

platiciclovek := prvnizaznam;

while (platiciclovek <> nil) begin

   next := platiciclovek.dalsi;

   dispose(platiciclovek);

   platiciclovek := next;

end;

tady to máš moc hezky popsaný ten zásobník

http://home.pf.jcu.cz/~edpo/program/kap11.html

Nahlásit jako SPAM
IP: 2a00:1028:83be:235a:e936:1bd5:6424:5836...–
gna
~ Anonymní uživatel
1891 příspěvků
4. 2. 2021   #23
-
0
-

#21 doma22
V tomto konkrétním případě u programu, který nic moc nedělá a uvolňuje paměť až na konci, tak to víceméně není potřeba, protože to systém udělá automaticky. Jinak to není žádný archaismus a nepotřebnou paměť musíš uvolňovat. Obecně ke každému new musí být zase dispose.

Další věc byla, že to uvolňování fronty (program obchod) vypadalo, že je špatně. Ale když na to koukám znova, tak to asi funguje správně, jen je to napsané tak, že mně (nás) to zmátlo.

Nahlásit jako SPAM
IP: 213.211.51.–
doma22
~ Anonymní uživatel
94 příspěvků
4. 2. 2021   #24
-
0
-

#23 gna
Aha, tak teraz som to už pochopil na plno, ďakujem veľmi pekne za pomoc. Veď to, že bol by som rád ak by som to potreboval do školy a mal učiteľa, ale situácia u mňa je taká, že ja už do školy nechodím, mám 37 rokov a léta školopovinní i neškolopovinní, mám už za sebou. Učím sa programovať samovzdelavaním, odbornou literatúrou, materiálmi z internetu a hľadaním pomoci na fórach. Učím sa niečo čo by som zvládol aj reálne robiť, keďže nie som vzrastovo nejaká gorila, aby som zvládol tie ich východné normy vo fabrike a po nehode, ani moja chrbtica nie je nič moc, ako nehovorím, že potrebujem vozík, ale dlhé stánie za pásom proste dám tak tri- štyri dni v kuse a potom mám už problémy, ale aby sme sa pochopili, nie som ani nejaké 40kg tintitko, okrem toho mám dosť prehľad o histórii a reálnom živote, z čoho potom vyplivajú animoziti keď som v kolektíve, keďže neznášam tie rečičky mimo reality o slobode a podobne , ani romantické bludy od Rozamundy Pilčer. So mnou sa život nijak extra nehral a všetko mám som si viac menej musel vybojovať, takže keď potom počujem vedľa seba tých ľudí mimo reality, tak mám nervičky. Preto som si urobil i kurzy SBS a VZV aby som sa v práci vyhol zbytočným konfliktom, no bohužiaľ dnešná situácia na trhu je taká, že na tieto pozície je ťažko sa dostať. Takže sa snažím nejak uživiť, ale súčasne sa snažím naučiť sa niečo, čo by mi zabezpečilo ako sa povie stabilitu v mojom živote. Takže ako som písal, nemám sa na koho obrátiť s pomocou a preto si veľmi vážim, že sa mi snažite pomôcť, vysvetliť a poradiť, za čo veľmi pekne ďakujem a ak by ste mali niekedy cestu do Popradu a Tatier, veľmi rád sa stretnem s Vami osobne. A čo sa týka toho školopovinného, hádam som tam neurobil chybu, keďže neovládam češtinu na 100%, tak ak by tam bola chyba, prosím neberte to nijak osobne, v žiadnom prípade som nechcel uraziť, ale hodil som to tu skôr na odľahčenie a ako vtip. Ešte raz ďakujem za pomoc

Nahlásit jako SPAM
IP: 178.143.117.–
doma22
~ Anonymní uživatel
94 příspěvků
4. 2. 2021   #25
-
0
-

#24 doma22
A prepáčte, keď som sa už tak rozpísal, moje reálne meno je Jano

Nahlásit jako SPAM
IP: 178.143.117.–
JerryM0
Věrný člen
4. 2. 2021   #26
-
0
-

aha Jano, no pascal je dobrej  pro uplny začátečníky a aučí se to děti v 8-9 třídách a 1-3 ročníku na střední  ale  pascal už v reálném životě nepoužiješ .. spíš C nebo C++ nebo C# nebo Java a tak podobně .. nebo HTLM,CSS, JavaScript, PHP .. takže jde o to aby ta tvoje práce nepřišla nazmar .. protože .. asi ti to nikdo neřek ale .. trvá to tak 5 let než se naučíš něco s čim se budeš moct živit .. s ohledem na tvuj věk.

my ti samozřejmě pomužeme, ale možná bys měl zkusit HTML5+CSS3+Javascript.. je to dobře placený a budeš tzv. FrontEnd Webový programátor

Nahlásit jako SPAM
IP: 2a00:1028:83be:235a:e936:1bd5:6424:5836...–
doma22
~ Anonymní uživatel
94 příspěvků
4. 2. 2021   #27
-
0
-

#26 JerryM
Som veľmi rád, že mi pomáhate, keďže dnes je to už skôr rarita, ako samozrejmosť a cením si to. Viem, že paskal je dnes už skôr iba na učenie, a nie na nejaký reálný veľký zárobok, ale ako ste poznamenali, som úplný začiatočník amatér, takže musím začať pomaly. Aj s tým rátam, že istý čas to potrvá, kým budem môcť vôbec uvažovať o tom, že programovanie by ma mohlo uživiť a že to ešte ako sa povie potrvá dosť dlho kým budem schopný rozbehnúť moje vlastné projekty, preto aktívne hľadám prácu, aby som to nejak preklenul. Mám v pláne prejsť na C, a vytvoriť svoje projekty, ale zase na druhu stranu, ovládať programovanie v jazykoch kde ich licencie nie sú nijak viazané, si myslím, že to zas nie je tak úplne na škodu.

Nahlásit jako SPAM
IP: 178.143.117.–
gna
~ Anonymní uživatel
1891 příspěvků
4. 2. 2021   #28
-
0
-

#27 doma22
Já chápu tu myšlenku projít si ty jazyky postupně, ale zároveň je to ztráta času. I v moderních jazycích můžeš postupovat pomalu. Já bych doporučil rovnou skočit na C# (ne C, ne C++, ale C#), nebo ty webové technologie jak zmínil Jerry.

Nahlásit jako SPAM
IP: 213.211.51.–
doma22
~ Anonymní uživatel
94 příspěvků
4. 2. 2021   #29
-
0
-

#28 gna
Plne s Vami súhlasím, je pravda, že som predpokladal, že zohnám si materiáli ako sa povie od nuli, rýchlo to prebehnem a idem ďalej. Uznávam, že to bol pohľad amatéra a ako sa povie veľké oči. Nepredpokladal som, že by mi paskal robil také problémy a ani vo sne som si nemyslel, že budem odkázaný na pomoc cez fóra. Ono sebakritika nie je zlá vec, hlavne ak sú to fakty, pravda a nie je to prehnané. Takže áno mal som veľké oči, je to pravda. No je mi ľúto, priznávam, položiť knihy čo som si kúpil len tak do poličky, keďže som investoval  do nich moje zarobené peniaze. Aj to bude asi chyba, ono bohužiaľ, ale realita pre melancholiu nemá veľké pochopenie. No už skutočne končím paskalom, mám tu fakt už len pár vecí a v Lazaaruse mi nie sú jasné iba dve. Takže aspoň to je moja predstava, možno aj mylná, keďže ja som zatiaľ iba amatér v programovaní, že cca do mesiaca uzavriem paskal a Lazarus, samozrejme ak mi niekto pomôže, čím by som sa mohol plne sústrediť už iba na vizual a dokončil grafiku v ňom, keďže ako som písal úplne na začiatku vlákien, išiel som súbežne, no a potom už sa plne venoval C a C++ i  Qt. Ale stále som Vám vďačný za trpezlivosť a pomoc a stále, ak by ste mali cestu okolo ako sa povie, platí, že rád sa s Vami, ak by ste chceli stretnem

Nahlásit jako SPAM
IP: 178.143.117.–
JerryM0
Věrný člen
5. 2. 2021   #30
-
0
-

učit se pascal pokud nejsi na základní nebo střední škole a je ti 37 je naprostá blbost je to vyhozenej čas

jediná kloudná argumentace je, že programování JEN pomocí statických proměnných se používá např. pro psaní kódu pro embedded systémy např. WEBový server je v Céčku a jen ve statických proměnných. Tam se používají z důvodu rychlosti a stability JEN statické proměnné. Klíčové slovo NEW tak nepoužiješ. Ale s ohledem na tvuj věk je jednodušší jít se rovnou učit standard ANSI C99 a hlavně mít nějaký uplatnění u nějaký firmy.

v tvým případě bych si došel na úřad práce a požádal bych o rekvalifikační příspěvek, který dostaneš pokud budeš pracovat u nějaký firmy, dosáhneš i na peníze z evropských sociálních fondů. zaplatí ti z toho rekvalifikaci. firma může požádat i o dotaci na vývoj. viz https://www.enovation.cz/ .  jde jen o to se "někam" vetřít do nějaký firmy. fyzickým osobám je to nedostupné. např. na Ostravsku se takhle rekvalifikujou horníci na programátory v PHP a podobně, je to sice tragédie ale když to EU zaplatí tak co ..

Nahlásit jako SPAM
IP: 2a00:1028:83be:235a:a97b:6f62:f763:691e...–
doma22
~ Anonymní uživatel
94 příspěvků
5. 2. 2021   #31
-
0
-

#30 JerryM
Nad tým som už uvažoval, ale i keď je ČR a SR v podstate na tom rovnako, ako Slovák musím s smútkom skonštatovať, že my sme na tom horšie v týchto veciach, súvisy to hlavne s našou históriou, keďže od pádu Veľkej Moravy sa naša inteligencia zámerne likvidovala, najhoršie v Rakúsko - Uhorsku, kde i keď to bol žalár národov, predsa len český národ v podstate pod Viedňou mal lepšie možnosti sebazáchovy ako my pod maďarskou Budapešťou, za ČSR sa to síce uvoľnilo, ale i tak to nebolo pre Slovákov ružové, no je pravda, keďže chcem byť objektívny, nie fanatický ako je to dnes v móde, tak je pravda, že bez ČSR a aj bez českého národa by Slováci zanikli, je na škodu veci, že Praha to potom dosť často v ČSR začala zneužívať, bohužiaľ ako sa povie biele golieriky vždy robia iba zlobu medzi ľuďmi a národmi, a pritom som presvedčený, že ľudia bez tých bielych golierikov by vedeli žiť v mieri a pokoji, študoval som na SPU ( Slovenská Poľnohospodárska Univerzita ), keďže som veril, že nie je  možné vypláchnuť mozog ziadnému jednotlivcovi tak, že by mu nevadilo ak likvidujú jeho možnosť primárnej potreby ( jesť ), no mýlil som sa, je však i pravda, že rád pracujem zo zvieratami a strojmi, keďže tam sa vždy ukáže inteligencia človeka. Čo sa týka úradu, u nás to tu fungovalo tak, že ak ste nemali známeho, mohli ste zabudnúť, že by Vám úradník sprostredkoval rekvalifikáciu, chcel som rekvalifikáciu na SBS, či VZV, no nakoniec som si to musel riešiť po svojej osi, lebo by som tieto preukazy asi nemal do dnes, a dnes môj národ je v takom marazme, vďaka absolútne diletantskej a neschopnej vláde, že je problém sa len vôbec dostať na úrad a vôbec niečo riešiť s úradníkom, ja sa len modlím bratia Česi a Moravaci, a vôbec všetky národy na svete, aby sa takéto diletantské vlády neusadili i u Vás, lebo v tom prípade tu pre tú ich neschopnosť skutočne nastane tretia svetová, ale je pravda, že sme si toho idiota na vláde i v prezidentskom paláci zvolili sami, ja konkrétne nie, ale ostatní áno, vždy ma vytáčalo ak niektorí Vaši občania nadávali Slovákom do blbých Slovákov, tak ako i Maďari do buta tót, ale bohužiaľ keď vidím, čo za čudá sa po rozdelení u nás dostávajú k moci, tak už ani neviem, či mám vôbec právo sa nad tým rozčuľovať, ale ďakujem za poradenie i mimo programovania a ak sa mi podarí, lebo to u nás asi vie iba Boh, čo tí diletanti tu ešte zavedú, tak sa o tom porozprávam s tou mojou úradníčkou, predstavte si, že najčerstvejšie u nás sa stane riaditeľ polikliniky hutník, ktorý má ešte problémy vysvetliť jeho čudné podnikanie, veď to je úplne choré, to sa asi ani v Bangladeží, teda Mňanmarsku po novom nemôže stať

Nahlásit jako SPAM
IP: 178.143.117.–
JerryM0
Věrný člen
5. 2. 2021   #32
-
0
-

teď je tu kapitalismus, každý se musí postarat sám o sebe .. tak to je .. všichni to tak chtěli v roce 1989.

Nahlásit jako SPAM
IP: 2a00:1028:83be:235a:a97b:6f62:f763:691e...–
doma22
~ Anonymní uživatel
94 příspěvků
5. 2. 2021   #33
-
0
-

#32 JerryM
Tu ani tak nejde o kapitalizmus, kapitalizmus je podľa mňa chybový systém, ktorý sa nedá opraviť, keďže ako náhle opravím jeden problém, padám do ďalšieho, ale to je vec názoru, a ja nepatrím k extrémistom pravicovým, ľavicovým ani náboženským, ku žiadnym, tak isto vidím i chyby v socializme, keďže komunizmus nikde na svete nebol, to bola len taká mantra pre ľavicových fanatikov, ako pre pravicových bájna demokracia, moju mamu napríklad v socializme vďaka udavačke podžubkali za to, že ma pokrstila, keďže je to národovkyňa a pri tom bola členkou strany, uznávala socializmus a do dnes je pre ňu spravodlivejší ako kapitalizmus, ale rozdiel je v tom, že i jej to ako sa povie osladili, no neprišla o prácu, teda chleba. Dnes ani nie je problém a v podstate to nikdy veľký problém  nebol žiaden izmus, problém je vždy ak sa dostanú na vedúce funkcie diletanti, nie je možné v žiadnom izme, aspoň ak vládne zdravý rozum, aby bol riaditeľ polikliniky hutník, to je ako keby bol baník chirurg, aj keď si vážim každú profesiu, ale pacient by mu asi pri operácii umrel. No a dnešný stav SR ani tak nesúvisí s kapitalizmom, ale možno by sa dalo nájsť aj nejaké prirovnanie pri programovaní, no keďže v tom som amatér, tak použijem prirovnanie z môjho vyštudovaného odboru. Ak v nejakej populácii budete pravidelne množiť/šľachtiť len tých najhlúpšich jedincov a inteligentných dusiť a likvidovať, potom Vám po pár generaciach populácia zblbne. Slovákom po 48, teda po Rakúsko - Uhorskom akože vyrovnaní išlo doslova o prežitie, buď si bol Maďar a mal si právo žiť, alebo nie, a to sa samozrejme odzrkadlilo i na národe.

Nahlásit jako SPAM
IP: 178.143.117.–
doma22
~ Anonymní uživatel
94 příspěvků
5. 2. 2021   #34
-
0
-

#32 JerryM
A uznávam, že to je môj názor, a v žiadnom prípade nechcem nikoho meniť, ale to musím poznamenať, že ja v podstate nemám nič proti tomu, aby sa každý v prvom rade snažil sám a až potom žiadal o pomoc, to je podľa mňa úplne v poriadku, ale v kapitalizme to v podstate funguje tak, že kým to nie je hrdelný zločin, nie kedy, ako u nás momentálne ani dôkazy nemusia byť, ale zase aby som nekrivdil i na západe sa to deje ( Asnž a tak ) a kým to nie je neplatenie daní, štát má svojich občanov v podstate na háku, ak samozrejme neponúkam prácu a nemám konekcie, ale potom sa pýtam, na čo je v takom prípade štát, prečo potom mám postih ak neplatím dane, lebo ak máme fungovať ako v kmeňovom zriadení, kde v podstate to fungovalo ako sa povie rob čo chceš a pomôž si sám, tak je úplne nezmyselné platiť dane do štátneho rozpočtu, platiť subjekty, ktoré neprodukujú nič ( súdy, polícia, vojsko a podobne), takže práveže štát podľa mňa má povinnosť sa postarať, keďže dane platia nie len tí čo ponúkajú prácu, ale všetci občania, aj zamestnanci a platili dane aj tí, ktorí boli zamestnaný ako ja a vďaka akože korone kauze o tú prácu prišli, inak podľa potom nie sú potrebné štáty, súdy, polícia a podobne, keď sa mám o všetko postarať sám, ale ako hovorím, koľko ľudí, toľko názorov, čo je samozrejme v poriadku

Nahlásit jako SPAM
IP: 178.143.117.–
doma22
~ Anonymní uživatel
94 příspěvků
5. 2. 2021   #35
-
0
-

#34 doma22
Ale nechajme politiku politikom a iným fóram

Nahlásit jako SPAM
IP: 178.143.117.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 1 host

Podobná vlákna

Datova struktura - slovnik — založil BigBear

Dynamická Struktura — založil Petr

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý