Zyrafa.doc

(1041 KB) Pobierz
Szczecin, 2000

–  4 

 

 

Temat:              1.              Zmienne wskazujące, odwołania do pamięci operacyjnej (PO)

              2.              Budowa i działanie list jednokierunkowych

 

 

CO TO JEST ???

CO TO JEST ???

CO TO JEST ???







   FRAGMENT DROGI

   WSTĘGA ZA OKNEM

   WZÓR NA OKNIE

   ŻYRAFA

   SŁOŃCE

   KWIAT

   WZÓR GEOMETRYCZNY

   KOŁO W MŁYNIE

   MEKSYKANIN

              W SOMBRERO

              NA ROWERZE

 

CZY KTOŚ OBSERWOWAŁ KRĘCĄCĄ SIĘ PARABOLICZNĄ ANTENĘ ???

 

SKĄD WIEMY, ŻE ZWIERZĘ, NA KTÓRE PATRZYMY, TO PIES ???





 



 

SHIH-TZU

JAMNIK

OWCZAREK







BULDOG

HIENA

YORKSHIRE

 

A TERAZ, CZY JEST MOŻLIWOŚĆ DOWOLNEJ INTERPRETACJI ???

 

CO TO JEST ???

                            CO TO JEST ???





   SŁOŃCE

   KWIAT

 

CZY OCZY WIDZĄ ???

 

OD CZEGO więc ZALEŻY, CO WIDZIMY ???

   OD WYOBRAŹNI

   OD KONTEKSTU

   OD SUMY NASZYCH ŻYCIOWYCH DOŚWIADCZEŃ

   OD SUMY DOŚWIADCZEŃ CAŁEJ CYWILIZACJI, CZYLI OD ... KULTURY

 

WIDZIMY STÓŁ i NAZYWAMY TĘ RZECZ STÓŁ.
Z JAKICH DWÓCH ELEMENTÓW SKŁADAMY POJĘCIE „STÓŁ” ???

   jeśli obcokrajowiec powie „TISCH”, to my nie rozumiemy, że to „STÓŁ”, nawet jeśli widzimy tę rzecz,
dla nas „STÓŁ”, dla Niemców „TISCH”, dla Amerykanów i Anglików „TABLE”, itp.

   pojęcie „STÓŁ”   to   STÓŁRZECZ + STÓŁNAZWA , te dwa elementy są ściśle ze sobą związane

   jeśli nie ma nazwy, to możemy nie rozumieć, czym jest rzecz

   jeśli nie ma rzeczy, to możemy nie rozumieć nazwy
(ale czasem rozumiemy pojęcia abstrakcyjne, bez fizycznie istniejącej rzeczy)

 

CO TO JEST ???

CO TO JEST ???

Ø

ØA

    LICZBA CAŁKOWITA / NATURALNA ZERO

    CYFRA / ZNAK ZERO

    ZNAK ZERO NAPISANY PRZEZ INFORMATYKA

    LICZBA  0.0  RZECZYWISTA,
ALE NAPISANA W SKRÓCIE

    BIT ZERO, CZYLI BRAK INFORMACJI / SYGNAŁU

    JAKIŚ ZNAK GRAFICZNY

    DWA ZNAKI   ’Ø’   i   ’A

    NAPIS  ’ØA’  Z DWÓCH ZNAKÓW

    NAPIS O DŁUGOŚCI ORD(0)=48 Z PIERWSZYM ZNAKIEM ’A, DALSZYCH ZNAKÓW BRAK

    LICZBA HEXADECYMALNA

    LICZBA 10 WYRAŻONA W UKŁADZIE HEX

 


 

MASZ ZA ZADANIE DOSTARCZYĆ PRZESYŁKĘ.
W JAKI SPOSÓB  (na trzy sposoby) ZIDENTYFIKUJESZ
CEL DOSTARCZENIA PRZESYŁKI ???

 

 

 

   poprzez ADRES, czyli dojdziesz do drzwi lub do skrzynki pocztowej, która jest odpowiednikiem adresu

   poprzez identyfikację OBSZARU, np. adresat jest twoim znajomym, wiesz gdzie on mieszka,
idziesz do niego i w jego mieszkaniu zostawiasz przesyłkę, nawet nie musisz dokładnie znać adresu

   poprzez identyfikację osoby, czyli WARTOŚCI, np. adresat jest twoim znajomym,
więc jeśli wejdziesz do jego mieszkania i go zobaczysz, wręczysz mu przesyłkę

 

Wartość          Adres          Obszar

 

Do tej pory posługiwaliśmy się wyłącznie WARTOŚCIĄ

OBSZAREM też, ale to było dla nas niezauważalne

 

ADRES nie jest WARTOŚCIĄ, tylko ją WSKAZUJE  !!!

 

PO CO TO WSZYSTKO ???

 

BO CZASEM PROGRAMISTA CHCE ZOBACZYĆ ŻYRAFĘ

tzn. jak w naszym przykładzie

czasem chce zobaczyć liczbę ZERO,
kiedy indziej znak ZERO,
albo jeszcze coś innego


 

ZOBACZYMY TERAZ EFEKTY OGLADANIA
ZAWARTOŚCI PAMIĘCI OPERACYJNEJ NA RÓŻNE SPOSOBY

 

{===========================================================================}

Program Wsk1Demo;

Uses Crt;

Var  Wart :Integer;  { wartosc jest liczba calkowita typu Integer           }

     Ref  :^Integer; { wskaznik do obszaru, w ktorym "widzimy" wartosc      }

                     { typu Integer, za chwile zamienimy to na ^Char        }

    {Ref od angielskiego Reference oznacza Odwolanie, Adres, Wskazanie      }

begin

  ClrScr;

  Wart:=65;          { do zmiennej Wart w PO wstawiamy liczbe typu Integer  }

  Ref:=Addr(Wart);   { albo Ref:=@Wart; wyznaczamy adres tej wartosci w PO  }

  writeln(Ref^);     { Ref wskazuje na obszar, a Ref^ jest jego zawartoscia }

                     { dla Ref:^Integer; zobaczymy/wyswietlimy liczbe 65    }

                     { dla Ref:^Char;    zobaczymy/wyswietlimy znak   A     }

  writeln; write('Nacisnij Enter...'); readln;

end.

 

 

{===========================================================================}

Program Wsk2Demo;    { tym razem bedziemy zagladac do obszaru,              }

Uses Crt;            { ktory "widzimy" jako opisana nizej tablice           }

Type Tws =array [1..10] of Integer;

                     { za chwile zamienimy Integer na Char                  }

                     { i bedziemy miec tablice zawierajaca znaki            }

Var  Wart :Integer;

     Ref  :^Tws;     { wskaznik do obszaru, w ktorym "widzimy" tablice      }

begin                { typu Tws                                             }

  ClrScr;

  Wart:=65;          { do obszaru zmiennej Wart w PO wstawiamy liczbe typu  }

                     { Integer, ale bedziemy patrzec na ten obszar tak,     }

                     { jakby zawieral tablice typu Tws                      }

  Ref:=@Wart;        { albo Ref:=@Wart; wyznaczamy adres tej wartosci w PO  }

 

  writeln(Ref^[1]);  { Ref wyznaczylismy jako adres obszaru zmiennej Wart,  }

                     { ale Ref z definicji wskazuje obszar z tablicĄ        }

                     { typu Tws, wiec Ref^ "zobaczy" tablice w miejscu,     }

                     { gdzie zostala wpisana liczba Wart, dlatego Ref^[1]   }

                     { jest pierwszym elementem tej tablicy                 }

                     { dla Tws...Integer; zobaczymy/wyswietlimy liczbe 65   }

                     { dla Tws...Char;    zobaczymy/wyswietlimy znak   A    }

  writeln; write('Nacisnij Enter...'); readln;

end.

 

EFEKTY OGLADANIA ZAWARTOŚCI PAMIĘCI OPERACYJNEJ

INNE WERSJE METOD z POPRZEDNICH ZAJĘĆ

 

{====================================================================================================}

Program Wsk3Demo; Uses Crt;

Type Tws =String[10];{ lancuch o dlugosci maksymalnej 10 znakow, czyli obszar zawierajacy 11 bajtow}

                     { razem z bajtem okreslajacym dlugosc lancucha         }

     Ttt =Array [0..10] of Byte; { tablica 11-tu liczb typu Byte            }

Var  Wart :Tws;      { tym razem Wart jest napisem typu Tws                 }

     tt   :Ttt;      { natomiast tt jest tablica typu Ttt z liczbami        }

                     { i bedzie zapisana w innym obszarze niz Wart          }

     Ref  :^Tws;     { wskaznik do obszaru, w ktorym "widzimy" napis Wart   }

     k    :Integer;  { zmienna licznika petli                               }

begin

  ClrScr; Wart:='ABCDEFGHIJ';{do obszaru zmiennej Wart w PO wstawiamy napis }

                     { z 10-tu znakow, czyli zajmujemy 11 bajtow            }

  Ref:=@Wart;        { albo Ref:=@Wart; wyznaczamy adres tej wartosci w PO  }

                     { czyli adres, ktory wskazuje wpisany tam String       }

                     { Ref wskazuje na obszar, a Ref^ jest jego zawartoscia }

  Move(Ref^,tt,11);  { obszar Ref^, czyli napis, czyli 11 bajtow, przesuwamy do obszaru z tablica tt}

                     { w obszarze wskazanym przez Ref "widzimy" 11 bajtow,  }

...

Zgłoś jeśli naruszono regulamin