Programmeringsteknik med Pascal

Bälter: Programmeringsteknik med Pascal, Fel och förtydliganden

Upplaga 1. Fel påpekade tom 960904

Det allvarligaste felet är det på sidan 34.

Vad gör man om man misstänker fel i boken?

Alla som läser boken uppmanas att meddela fel och oklarheter direkt till Olle Bälter. Om påpekandet leder till ändringar i boken kommer personen att belönas med godis och får sitt namn i tacklistan i nästa upplaga. Observera att utgåva två redan är tryckt. Varje fel belönas endast en gång, den som först meddelar Olle får belöningen. Fel i detta dokument kan också påpekas, men ger normalt ingen notis i boken.

Tillkomna felpåpekare

s9 Birgitta Glass, Karin Persson, Mikko Kalliosalo, David Bergström, Patrik Pettersson, Per Andersson, Kennet Berg, Mikael Goldman, Karin Andersson, Jens Hedlund, Anna Haglund, Per Häggström, Andreas Häglund, Jan-Erik Moström, Daniel Fagerström, Per Lindberger, Daniel Albrektson, Erik Freiholtz, Claes Richárd och Malin Hansen förtjänar uppmärksamhet för noggrannt läsande och mod att påpeka fel.

Fel i texten

s19 Överst. Förtydligande: DistansminutTillKm är ingen variabel, men kan användas som en sådan i funktionen och då endast på vänstersidan i en tilldelning.

s19 Hänvisningen ska vara till sidan 53, inte 54.

s21 Tabell 1.3. Förtydligande: Heltal och heltalsdel = Integer.

s22 r3 från slutet. Anropet till Cos ska naturligtvis vara ett anrop till TanDeg. Dvs:

 Write('Tangens för pi/2 är:', TanDeg(ToDegrees(3.141592/2)) :1:5);
s31 sista raden. Summan inkl moms blir 189.00.

s34 Näst sista raden i Nonsens2. Parametern heter formellReferensParameter, inte formellVardeParameter.

s44. I funktionen KpToPascal borde konstanten KpPerPascal heta PascalPerKp

s48 Övning 1.11: Byt sin2 mot cos2

s50-51 Byt frågan "Hur kallt är det ute" till "Vilken temperatur är det ute", så blir den tydligare. Att mammor alltid tycker att det är kallt ute hör inte hit.

s51 r10 Byt Fryspunkt mot CelsiusFryspunkt.

s52 Förtydligande: Utskriften efter IF Odd(N) THEN är ett felmeddelande.

s55 Det är inte säkert att SET OF Integer fungerar på alla datorer (se sid 96), men skriv SET OF 0..100 om du klarar dig med de 100 första heltalen och prova på din dator hur stor mängd som är möjlig.Ofta en tvåpotens dvs 256, 1024 osv.

s61 utskriften av total förmögenhet ska ha ett , ' kr' sist i Writeln-satsen.

s62 mitt på sidan, allmänhet stavas i allmänhet med ett n

s63 utskriften av total förmögenhet ska ha ett , ' kr' sist i Writeln-satsen.

s81 r2 till-låtna stavas med två l.

s81 r21 det ska vara samma parentestyp efter 255 som efter 0.

s82 I programmet CharacterFrequency måste vektorn CharacterFrequency initieras till 0 (och programmet ska heta något annat än samma sak som variabeln). Lägg till:

PROCEDURE InitCharacterFrequency(VAR v:IntegerArray);
{Initierar v till nollor}
VAR i:Integer;
BEGIN
  FOR i:=0 TO 255 DO 
    v[i]:=0;
END;
Samt anropet i huvudprogrammet (före anropet till Count):

InitCharacterFrequency(CharacterFrequency);
s85 Första raden, tredje stycket: "Innebär" stavs med två n.

s85-86 Det är fult att sätta in längden för hand i en String. Ett bättre sättet är att man använder funktionen Sub som returnerar en delsträng. Sub (eller motsvarande) brukar finnas där String och Length finns. På NADAs datorer heter den Substr och kan anropas str := Substr(str,1,4). Se det lokala pascalhäftet.

s88 Uppräkningen av tot i huvudprogrammet ska ligga efter anropet till InsertSorted, inte först i WHILE-slingan som det gör nu.

s89 Tabell 3.1 kolumn 5, rad 3 står det en 4 som borde vara en 2.

s90 Sista stycket. Det finns faktiskt en parameter till ReadTriSystem som är värdeparameter.

s98 Förtydligande: Inget av kalkylatorprogrammen klarar negativa tal.

s98 Andra parametern till Push ska vara en värdeparameter.

s100 I alla anrop till Pop och Push ska stacken vara första parameter (inte andra som det står i programmet).

s103 Övning 3.10: stryk ett med.

s103 Övning 3.11: Byt namntyp mot name.

s109 1r datastrukturen ska det stå och inget annat.

s113 Proceduren Search. Key bör vara en parameter av typen elementp. P ska sättas till det element som är likadant som key. (Se Search i Listor.p)

s118 r9 från slutet. Stryk ett "kan"

s118-122 Byt NY mot NewP.

s119 r13 Byt "är då" mot "då är".

s119 näst sista raden. Anropet till AddBefore har en felaktig parameter om man jämför med figur 4.19. I nästa version kommer 4.19 att ändras. Dessutom borde anropet vara:

IF P^.tal < NY^.tal THEN
  AddBefore(List, NY, P)
ELSE
  AddLast(List, NY);
s121 InsertSorted som den ser ut i Listor.p ska in och förklaras.

s135 4.20e byt "ska" mot "är" och stryk "vara".

s140 r5 byt filvariblen mot filvariablen.

s155 r22 Byt

 Pop(S, e)
mot
 Pop(tmpStack, e)
Observera radnumret, det finns en likadan sats på rad 17, men den är korrekt.

s161 Plattform, datorarkitektur och operativsystem ska tas med.

s174 ochså stavas också.

s190 5r Världen stavas just så.

s193 12r från slutet: repeat byts mot timesRepeat.

s209 IsOrdered det står <= i kommentaren, men < i koden. Byt så att det blir lika.

s212 Ett sigma saknas, det borde stå:

 Normal:=m+sigma*Sqrt(...
s214 Förtydligande: Random som är given i boken ger aldrig talet 0, endast tal i det öppna intervallet ]0..1[. Därmed fungerar Normal precis som den står. Om man har en annan Random som ger även talet 0 så måste Normal modifieras t ex så här:
REPEAT
  slumptal := Random;
UNTIL slumptal <> 0;
Därefter används slumptal i st f Random (observera de två anropen).

Fel i lösningarna

s216 3.24 "delsträngen" stavas alltid med "l".

s220 1.6 Programmet bör heta något annat än CosTeorem, eftersom funktionen heter det.

s220 1.6 I funktionen CosTeorem ska mellanliggandeVinkel användas i stället för den globala variabeln alfa. Det funkar som det står, men är principiellt knasigt.

s221 1.10 Man bör dra av för TECKNET noll, dvs det skall stå: ...-3*Ord('0')... och inte ...Ord(0)... s221 1.11: cos-delen ska ingå i det som kvadreras med Sqr.

s225 Om man trycker på retur direkt fås division med noll. Skriv:

     IF antal > 0 THEN Write('Medelvärde ', SUMMA/ANTAL :1:5)
     ELSE Writeln('Inga tal givna!');
s225 2.7 bör lösas med en REPEAT-slinga.

s226 2.9 "Y" saknas i det som ska dras bort från mängden med konstanter.

s229 2.21 WHILE Fnu < AntalKaniner, inte >

s231 Blanktecken saknas efter a)

s232 2.32 Stryk hela IF-satsen i CodedChar. MOD 255 ser till att värdet blir inom de tillåtna gränserna.

s242 3.23 och 3.24 är omkastade.

s248 4.18a. Posten som innehåller 'B' blir en spökpost redan i första steget..

s258 5.8 sista ordet första stycket. Byt "VAR-typ" mot "referenstyp".

s261 lösningen till 5.17: ReadWord ska naturligtvis använda sig av parametern w i st f den globala WORD. Dessutom blir lösningen snyggare med CopyNonLetters(infil, utfil) som används i labb 6 (just nu läses inga skiljetecken alls).

Fel i sammanfattningen

s268 Tabell 11.11. Förtydligande: Heltal och heltalsdel = Integer.

Fel i tryckningen

s2 Innehållsförteckningen ska ligga här.

s291 ska vara pärmryggens insida. Tejpa ihop med ryggen.