x-kom hosting

Typy Danych W Pascalu - Pytanie

Quentin1
utworzono
utworzono

Witam.

Według gazetki (KŚ Ekspert), to są najpopularniejsze typy danych dla zmiennych:

Byte, wartość od 0 do 255, zajmuje Bajtów 1

Word, wartość od 0 do 65535, zajmuje Bajtów 2

Integer, wartość od -2(do 31 potęgi) do 2(do 31 potęgi)-1, zajmuje Bajtów 4

Real, wartość od 1,8*10 (do 308 potęgi) do 1,8*10(do 308 potęgi), zajmuje Bajtów 8

String[X], ciąg maksymalnie X znaków, zajmuje Bajtów X

Kazali napisać taki o to kod programu:

21175042vr3.png

I tu moje pytania:

1. Dlaczego do zmiennych x,y został przypisany typ danych Integer skoro żadna z liczb do nich przypisana nie przekracza nawet 255 więc równie dobrze mógłby zostać dobrany typ Byte (zaoszczędziło by to 3 Bajty pamięci) lub typ Word ?

2. Wartości w typie Byte nie mogą przekraczać 255, odnosi się to do wszystkich (tzn. wszystkie wartości nie mogą przekraczać razem 255), czy do każdej kolejno wartości (tzn. jedna wartość nie może przekroczyć 255) ?

3.

Zmienne String służą do przechowywania ciągów znaków. Podczas deklaracji takich zmiennych po słowie String można umieścić w nawiasach kwadratowych liczbę z przedziału od 1 do 255. Określa ona maksymalną długość ciągu znaków (a więc również liczbę bajtów, zarezerwowaną w pamięci dla tej zmiennej). Jeśli nie określimy maksymalnej długości dla zmiennej, kompilator zarezerwuje dla niej aż 255 bajtów.

Czyli w tym przypadku co powinienem napisać w nawiasach kwadratowych po String ?

Z góry bardzo dziękuję za pomoc.

Pozdrawiam,

Quentin.

Gość
komentarz
komentarz

Ten kurs Pascala był w KŚ?

Quentin1
komentarz
komentarz

W KŚ Ekspert - tak. Czekam na pomoc xD

mozdzen
komentarz
komentarz

1. To zależy od Ciebie. To Ty decydujesz o typie zmiennych. Jżeli rzeczywiście te liczby nie przekraczaja 255 to wydajniej byłoby ustalić zmienna byte. Integer nie jest błedem, ale niepotrzebnie zajmjuje tyle miejsca.

2. Każda zmienna jest liczona osobno. Możesz mieć np 4 zmienne typu byte, które będą zajmować po 250.

3. napis: string[7]

Kurzun
komentarz
komentarz

Ja też używam Integer lub Longint - zawsze wolę mieć margines błędu. W tym kursie dziwi mnie jedno. Dlaczego tak pokomplikowali z dźwiękiem? Przecież wystarczyło zrobić sound(2000); a nie przypisywać stałą i kombinować.

Quentin1
komentarz
komentarz
[...] 3. napis: string[7]

A dlaczego 7 - nie powinno być 5 (napis) ?

grucha
komentarz
komentarz
1. Dlaczego do zmiennych x,y został przypisany typ danych Integer skoro żadna z liczb do nich przypisana nie przekracza nawet 255 więc równie dobrze mógłby zostać dobrany typ Byte (zaoszczędziło by to 3 Bajty pamięci) lub typ Word ?

Tak jak poprzednik wspomniał: typ deklarowanych przez ciebie zmiennych zależy wyłącznie od Ciebie. Oczywiście w tym przypadku mógł byś zastosować byte i raczej powinno się go stosować, bo w TP każdy bajt pamięci się liczy, ponieważ do dyspozycji programu masz 640KB pamięci i przy większym programie możesz mieć przepełnienie pamięci co się wiąże z nieprawidłowym działaniem programu. Takiego problemu nie masz już kiedy programujesz w Delphi, tam czy użyjesz typu byte czy integer nie robi zbytnio różnicy ponieważ to są tylko 3 bajty i się stosuje zazwyczaj integer nawet przy małych wartościach ;]

2. Wartości w typie Byte nie mogą przekraczać 255, odnosi się to do wszystkich (tzn. wszystkie wartości nie mogą przekraczać razem 255), czy do każdej kolejno wartości (tzn. jedna wartość nie może przekroczyć 255) ?

Każda zmienna ma zarezerwowaną swoją pamięć, czyli 5 zmiennych typu byte zajmie Ci w pamięci 5 bajtów et cetera ;]

Czyli w tym przypadku co powinienem napisać w nawiasach kwadratowych po String ?

Tutaj ograniczasz sobie pamięć. Powiedzmy, że z góry wiesz, że jakaś zmienna string nie przyjmie długości większej niż 10 znaków. Wtedy piszesz String[10].

W tym kursie dziwi mnie jedno. Dlaczego tak pokomplikowali z dźwiękiem? Przecież wystarczyło zrobić sound(2000); a nie przypisywać stałą i kombinować.

Pewnie dlatego, że to jest kurs i chcieli pokazać jak w praktyce wygląda deklaracja i używanie stałych :)

Quentin1
komentarz
komentarz

Ale gdy np. ta zmienna napis ma 5 znaków to piszę potem

napis : String[5]

?

A gdyby było np. "poczta" to piszę

poczta : String[6]

?

grucha
komentarz
komentarz

Nie, nie, nie ;]

Nazwa zmiennej nie ma nic do długości zmiennej.

To co masz w nawiasie kwadratowym, to jest długość zmiennej np. napis jaki może przyjąć w programie.

powiedzmy masz takie coś:

var napis1, napis2:string[15]; wynik:string[20];begin napis1:='To jest napis 1'; napis2:='To jest napis 2'; wynik:=napis1+napis2; WriteLn(wynik);end;

W rzeczywistości program Ci wyświetli coś takiego:

"To jest napis1To je" ponieważ wynik może przechowywać maksymalnie 20 znaków.

Inaczej mówiąc: typ string jest typem tablicowym i jeżeli miał bym go zadeklarować w pascalu wyglądało by to tak:

string: array [0..255] of char;

Czyli zmienna może przechowywać 255 znaków. W przypadku ograniczenia przez string[15] deklaracja wyglądała by tak:

string: array [0..15] of char

Oczywiście to są przykłady tylko poglądowe ;]

luq
komentarz
komentarz
A dlaczego 7 - nie powinno być 5 (napis) ?

Powinno być [12] ponieważ zmienna napis w 2 etapie programy przyjmuje wartość 'Kurs Pascala', gdyby było 7 to wyświetlało by pierwszy napis tj. Ekspert poprawnie natomiast Kurs Pascala wyświetliłby Kurs Pa, tym bardziej z [5] nie działałoby poprawnie.

mozdzen
komentarz
komentarz
A dlaczego 7 - nie powinno być 5 (napis) ?

napis to nazwa zmiennej a nie tekst

Quentin1
komentarz
komentarz

OK - jeszcze jedno:

"Integer, wartość od -2(do 31 potęgi) do 2(do 31 potęgi)-1, zajmuje Bajtów 4"

Dlaczego jest wartość od -2147483648 do -2147483648-1 - tak pisało w gazetce. Czyżby znowu błąd ?

Kurzun
komentarz
komentarz

Ja mam takie informacje:

INTEGER (-32768..32767} 2 bajty ; ]

Quentin1
komentarz
komentarz

Kurzun, 2 Bajty to ma Word :o Ja się do cholerki normalnie w tym wszystkim już pogubiłem :(

luq
komentarz
komentarz

Kurzun źle piszesz.

Integer ma zakres od -2 147 483 648 do 2 147 483 647 i zajmuje 4 bajty.

Quentin1
komentarz
komentarz
Zmienne String służą do przechowywania ciągów znaków. Podczas deklaracji takich zmiennych po słowie String można umieścić w nawiasach kwadratowych liczbę z przedziału od 1 do 255. Określa ona maksymalną długość ciągu znaków (a więc również liczbę bajtów, zarezerwowaną w pamięci dla tej zmiennej). Jeśli nie określimy maksymalnej długości dla zmiennej, kompilator zarezerwuje dla niej aż 255 bajtów.

Czyli ciągi znaków nie mogę przekraczać 255. Co by się stało jednak, gdybym dał String[256] ? Podczas kompilacji wystąpił by błąd ?

Kurzun
komentarz
komentarz

luq to nie ja piszę a tak jest napisane na:

http://www.pascal.eu.org/lekcja0.htm

Tak wyskoczy błąd kompilacji.

luq
komentarz
komentarz

Szczerze powiedziawszy przeglądając stronki można powiedzieć że jest to mnóstwo sprzecznych informacji

jednak tu napisane jest wyraźnie że:

Integer –2147483648..2147483647 znak, 32-bitowy (= 4 bajty)

Quentin1
komentarz
komentarz

luq, no właśnie, ale w KŚ pisze, że Integer ma wartość –2147483648..2147483647-1 - po co ta -1 na końcu jest ?

luq
komentarz
komentarz

Jest tak:

-2(do 31 potęgi) do 2(do 31 potęgi)-1

więc

–2 147 483 648 .. 2 147 483 648 - 1 co daje

–2 147 483 648 .. 2 147 483 647

Quentin1
komentarz
komentarz

Aha to już wszystko jest zrozumiałe - możecie zamknąć temat ;)

Gość
Ten temat został zamknięty. Brak możliwości dodania odpowiedzi.
×
×
  • Dodaj nową pozycję...

Powiadomienie o plikach cookie

Strona wykorzystuje pliki cookies w celu prawidłowego świadczenia usług i wygody użytkowników. Warunki przechowywania i dostępu do plików cookies możesz zmienić w ustawieniach przeglądarki.