[ Príspevkov: 7 ] 
AutorSpráva
Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 11.12.09
Prihlásený: 30.06.11
Príspevky: 26
Témy: 8 | 8

Ahojte potreboval by som pomoc s mojim programom. Jedna sa o smerniky v pascale a problem mam s mazanim smernika a hladanim smernika.
Mozte sa nato pozret a podarit mi. Uz sa s tym trapim dost a nejak stale mi to nejde.
Aj si to kreslim na papier a nic.

Kód:
PROGRAM ZVIERATKA;
TYPE UK=^ZVIERA;
     ZVIERA=RECORD
     MENO:STRING[50];
     DRUH:STRING[50];
     MAJITEL:STRING[50];
     DALSI:UK;
          END;
VAR R:UK;
    A:CHAR;

PROCEDURE VLOZ (VAR Z:UK);
VAR PP:UK;
    MENO:STRING;
    DRUH:STRING;
    MAJITEL:STRING;

BEGIN
NEW (PP);
WRITELN ('ZADAJ MENO ZVIERATA');
READLN (MENO);
PP^.MENO:=MENO;
WRITELN ('ZADAJ DRUH ZVIERATA');
READLN (DRUH);
PP^.DRUH:=DRUH;
WRITELN ('ZADAJ MAJITELA');
READLN (MAJITEL);
PP^.MAJITEL:=MAJITEL;
PP^.DALSI:=Z;
Z:=PP;
END;

PROCEDURE VYPIS (Z:UK);
VAR PP:UK;
BEGIN
PP:=Z;
WRITELN ('MENA ZVIERAT SU:');
WHILE (PP<>NIL) DO BEGIN
WRITELN (PP^.MENO,' ');
PP:=PP^.DALSI;
                   END;
END;

PROCEDURE ZRUS (VAR Z:UK);
VAR Q,PP:UK;
    MENO:STRING;
BEGIN
WRITELN ('ZADAJ MENO ZVIERATA KTOREHO POLOZKU CHCETE ZRUSIT');
READLN (MENO);
PP:=Z;
IF (MENO=PP^.MENO) THEN BEGIN
Z:=Z^.DALSI;
DISPOSE (PP);
                        END
ELSE
Z:=Z^.DALSI;
WHILE PP<>NIL DO BEGIN
IF (Z^.MENO=MENO) THEN BEGIN
Z:=Z^.DALSI;
Q:=PP;
PP:=PP^.DALSI;
Q^.DALSI:=Z^.DALSI;
DISPOSE (PP);
                        END;
                        END;
END;

FUNCTION HLADAJMAJITEL (Z:UK):UK;
VAR PP:UK;
    X:STRING;

BEGIN
HLADAJMAJITEL:=NIL;
PP:=Z;
IF (Z=NIL) THEN BEGIN
    WRITELN ('ZOZNAM JE PRAZDNY');
    EXIT;
                END;
WRITELN ('ZADAJ MAJITELA');
READLN (X);
BEGIN
WHILE (PP<>NIL) DO BEGIN
 IF (X=PP^.MAJITEL) THEN BEGIN
  WRITELN ('PRVOK SA NASIEL',X);
  HLADAJMAJITEL:=PP;
  BREAK;
                         END;
                   END;
END;
END;

FUNCTION HLADAJDRUH (Z:UK):UK;
VAR PP:UK;
    X:STRING;

BEGIN
HLADAJDRUH:=NIL;
PP:=Z;
IF (Z=NIL) THEN BEGIN
    WRITELN ('ZOZNAM JE PRAZDNY');
    EXIT;
                END;
WRITELN ('ZADAJ DRUH ZVIERATA');
READLN (X);
BEGIN
WHILE (PP<>NIL) DO BEGIN
 IF (X=PP^.DRUH) THEN BEGIN
  WRITELN ('PRVOK SA NASIEL',X);
  HLADAJDRUH:=PP;
  BREAK;
                         END;
                   END;
END;
END;


BEGIN
REPEAT
WRITELN ('V - VLOZENIE NOVEJ POLOZKY');
WRITELN ('Z - ZRUSENIE EVIDENCIE');
WRITELN ('M - HLADANIE PODLA MAJITELA');
WRITELN ('D - HLADANIE PODLA DRUHU');
WRITELN ('K - KONIEC PROGRAMU');
WRITELN ('U - VYPIS MIEN ZVIERAT');
READLN (A);
CASE A OF
'V': VLOZ (R);
'U': VYPIS (R);
'Z': ZRUS (R);
'M': HLADAJMAJITEL (R);
'D': HLADAJDRUH (R);
END
UNTIL (A='K');
END.


Prosim Vas kto vie pomozte mi :) Dakujem velmi pekne :)[/code]


Offline

Skúsený užívateľ
Skúsený užívateľ
Obrázok užívateľa

Registrovaný: 29.10.08
Prihlásený: 30.07.12
Príspevky: 933
Témy: 2 | 2

co znamena "nejak mi to nejde" ? pada to na nejakej chybe ? alebo to neodmazava ? alebo ako si to mame vysvetlit ?

pozri si vyhladavania, pokial das hladat prvok ktory je najdeny hned prvy tak je to OK, no pokial prvy najdeny prvok nesedi tak kde nacitavas nasledujuci prvok ? ved ti to padne do nekonecnej slucky !


Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 11.12.09
Prihlásený: 30.06.11
Príspevky: 26
Témy: 8 | 8
Napísal autor témyOffline : 07.05.2010 15:33 | Problem s hladanima mazanim u smernikov - Pascal

Program mi spusti a zadavanie novych poloziek mi tiez funguje ale problem je ze nemozem zmazat polozky - ked to dam tak mi bud sa spusti cyklus ktory trva stale a tak musim potom vypnut cely program alebo mi vypise chybu a spadne program ...
A ohladom hladania tak prvy prvok mi vie najst ale dalsie uz nie a ked chcem dat vyhladat dalsie tak mi hodi nekonecny cyklus a mam zasa program dole...

Potrebujem to aby mi niekto povedal a ak je to aj mozne aby mi ukazal ako by to malo byt spravne.


Offline

Skúsený užívateľ
Skúsený užívateľ
Obrázok užívateľa

Registrovaný: 29.10.08
Prihlásený: 30.07.12
Príspevky: 933
Témy: 2 | 2

si robis srandu ? vo vyhladavacom cykle stale testujes tu istu hodnotu
Kód:
WHILE (PP<>NIL) DO BEGIN
  IF (X=PP^.DRUH) THEN BEGIN
    WRITELN ('PRVOK SA NASIEL',X);
    HLADAJDRUH:=PP;
    BREAK; // ak najdes prvok tak cyklus skonci
  END;
  // ak prvok nenajdes tak by bolo vhodne ho vymenit za dalsi
 PP := PP^.DALSI;
END;

ohladom padania pri mazani , bolo by vhodne najprv otestovat
ci Z^.DALSI obsahuje nejaky pointer a az potom ho priradit


Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 11.12.09
Prihlásený: 30.06.11
Príspevky: 26
Témy: 8 | 8
Napísal autor témyOffline : 08.05.2010 20:41 | Problem s hladanima mazanim u smernikov - Pascal

Takze vyhladavanie som uz upravil a vsetko mi ide v poriadku.
Ale s tym mazanim to je stale zle. Mam mazanie zatial spravene tak ze ak je prazdny zoznam tak mi napise ze je prazdny teda je to v poriadku, dalej mam spravene aj to ze prvy prvok mi vie zmazat teda aj toto je v poriadku a mam spravene aj to ze od druheho a dalej tak ked chcem vymazat tak mi spravi to ze mi vymaze ale aj so vsetkym co mam predtym teda problem je vtom (odhadujem) ze sa mi pretrhol spojovy zoznam a nejak neviem napojit prvy a treti prvok aby som mohol ten druhy zmazat.
Neviem ci chapes co myslim ? Dufam ze ano


Offline

Skúsený užívateľ
Skúsený užívateľ
Obrázok užívateľa

Registrovaný: 29.10.08
Prihlásený: 30.07.12
Príspevky: 933
Témy: 2 | 2

no toto by malo fungovat
Kód:
PROCEDURE ZRUS (VAR Z:UK);
VAR Q,PP:UK;
    MENO:STRING;
BEGIN
  PP:=Z;
  Q := Z;
  IF (Z=NIL) THEN BEGIN
    WRITELN ('ZOZNAM JE PRAZDNY');
    EXIT;
  END;
  WRITELN ('ZADAJ MENO ZVIERATA KTOREHO POLOZKU CHCETE ZRUSIT');
  READLN (MENO);
  BEGIN
    WHILE (PP<>NIL) DO BEGIN
      IF (MENO=PP^.MENO) THEN BEGIN
        if Z = PP then  begin // ak pp je najvyssi prvok
          if PP^.dalsi <> nil then  // ak existuju aj nasledujuci prvok
            Z := PP^.dalsi  // posuniem nasledujuci prvok na prve miesto
          else
            Z := nil; // zrusim aktualny a zaroven jediny prvok
         end
        else
          if PP^.dalsi <> nil then  // ak existuju aj nasledujuci prvok
            Q^.dalsi := PP^.dalsi  // posuniem nasledujuci prvok na miesto vymazaneho
          else
            Q^.dalsi := nil;  //neexistuje dalsi prvok takze iba zrusim odkaz na vymazany prvok

        DISPOSE(PP);
        BREAK;
      END;
      Q := PP; // ak sa prvok nezhoduje odlozim si ho koli reorganizacii
      PP := PP^.DALSI; // posuniem sa na dalsi prvok
    END;
  END;
END;


Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 11.12.09
Prihlásený: 30.06.11
Príspevky: 26
Témy: 8 | 8
Napísal autor témyOffline : 10.05.2010 17:37 | Problem s hladanima mazanim u smernikov - Pascal

Ok coldak dakujem velmi pekne :)
Program je hotovy a funguje vsetko ako ma.
Este raz dakujem
Moderatori mozte temu zatvorit!


 [ Príspevkov: 7 ] 


Problem s hladanima mazanim u smernikov - Pascal



Podobné témy

 Témy  Odpovede  Zobrazenia  Posledný príspevok 
V tomto fóre nie sú ďalšie neprečítané témy.

Problem s mazanim DVD RW

[ Choď na stránku:Choď na stránku: 1, 2 ]

v Optické zariadenia

58

3568

06.01.2008 16:57

jarod242

V tomto fóre nie sú ďalšie neprečítané témy.

[VYRIESENE] Problem s mazanim textu v retazci

v PHP, ASP

1

408

16.03.2009 8:21

stenley

V tomto fóre nie sú ďalšie neprečítané témy.

Pochopenie smernikov v jazyku C

v Assembler, C, C++, Pascal, Java

10

8280

09.10.2014 8:24

BX

V tomto fóre nie sú ďalšie neprečítané témy.

DYNAMICKE vs. STATICKE pole smernikov !!!SUUURNE!!!

v Assembler, C, C++, Pascal, Java

6

2095

11.05.2009 8:48

sangokoko

V tomto fóre nie sú ďalšie neprečítané témy.

Suma členov matice pomocou smerníkov ( v C-ečku )

v Assembler, C, C++, Pascal, Java

1

1196

28.03.2009 10:05

neutronmind

V tomto fóre nie sú ďalšie neprečítané témy.

Staticke pole smernikov a jeho polozky - alokacia pamate

v Assembler, C, C++, Pascal, Java

6

1455

27.03.2009 17:42

programator

V tomto fóre nie sú ďalšie neprečítané témy.

Pascal problem

v Assembler, C, C++, Pascal, Java

4

480

12.09.2012 7:43

strider

V tomto fóre nie sú ďalšie neprečítané témy.

Free Pascal a Turbo Pascal

v Assembler, C, C++, Pascal, Java

0

430

19.12.2014 13:18

Styracoz

V tomto fóre nie sú ďalšie neprečítané témy.

Pascal zdrojový kód-Problém

v Assembler, C, C++, Pascal, Java

2

394

11.04.2012 1:34

Gregi555

V tomto fóre nie sú ďalšie neprečítané témy.

pascal: problem s retazcom

v Assembler, C, C++, Pascal, Java

2

560

23.06.2008 17:30

petos

V tomto fóre nie sú ďalšie neprečítané témy.

Pascal-problém s FILE

v Assembler, C, C++, Pascal, Java

18

1165

14.01.2008 12:59

hawe

V tomto fóre nie sú ďalšie neprečítané témy.

Pascal - problem s ulohou(subory)

v Assembler, C, C++, Pascal, Java

3

993

14.12.2009 18:39

Proxy69

V tomto fóre nie sú ďalšie neprečítané témy.

pascal:problem s otvaranim Unit subormi

v Assembler, C, C++, Pascal, Java

6

987

28.06.2008 2:11

Roberbo

V tomto fóre nie sú ďalšie neprečítané témy.

Problem s windowsem 7 pro free pascal

v Assembler, C, C++, Pascal, Java

3

515

24.12.2010 16:25

Goergius

V tomto fóre nie sú ďalšie neprečítané témy.

pascal

v Assembler, C, C++, Pascal, Java

19

3115

30.04.2007 19:54

nikita

V tomto fóre nie sú ďalšie neprečítané témy.

pascal

v Assembler, C, C++, Pascal, Java

0

745

03.05.2009 12:35

ebb



© 2005 - 2024 PCforum, edited by JanoF