DedSec Project

pascal — συγκεντρωτικός οδηγός — DedSec Project

pascal — συγκεντρωτικός οδηγός Pascal Μοντέλο λειτουργίας Η Pascal χρησιμοποιεί δηλωμένους τύπους και δομημένες διαδικασίες· οι δυνατότητες διαφέρουν σε Free Pascal, Delphi και παλιές…

Pascal

Μοντέλο λειτουργίας

Η Pascal χρησιμοποιεί δηλωμένους τύπους και δομημένες διαδικασίες· οι δυνατότητες διαφέρουν σε Free Pascal, Delphi και παλιές εκδόσεις.

Παράδειγμα

program Add;
var n: integer;
begin
  n := 2 + 3;
  writeln(n);
end.

Δοκίμασέ το με νόημα

Εντόπισε την ανάθεση := και ξεχώρισε declarations από το εκτελέσιμο begin/end.

Σφάλμα που πρέπει να ξεχωρίσεις

Τα string encodings, units και libraries εξαρτώνται από dialect· επίλεξε σωστή έκδοση compiler.

Για να κρίνεις την άσκηση, κατέγραψε την αρχική είσοδο, την πρόβλεψη και την παρατήρηση σε πραγματικό, συμβατό περιβάλλον Pascal. Δώσε ξεχωριστό παράδειγμα όπου αλλάζει μόνο μία μεταβλητή ή ένα όρισμα. Αν εργάζεσαι χωρίς την αναγκαία εφαρμογή, μελέτησε τη σύνταξη ως παράδειγμα και μην παρουσιάζεις το κείμενο ως εκτελεσμένο test.

Pascal — Αναλυτικός οδηγός εξάσκησης

Μικρή αφετηρία πηγαίου κώδικα

program Hello;
begin
  WriteLn('Hello, Ada!');
end.

Περιβάλλον: fpc hello.pas && ./hello.. Κράτησε αντίγραφο του αρχικού κώδικα και σημείωσε έκδοση εργαλείου. Ξεχώρισε αν η εκτέλεση επιστρέφει τιμή, εμφανίζει κείμενο ή αλλάζει state. Για τις πρώτες δοκιμές χρησιμοποίησε απομονωμένο περιβάλλον, όχι πραγματικούς λογαριασμούς ή δεδομένα.

Ανάλυση του ιδιαίτερου μηχανισμού

Με Val και error-position code διάβασε περιορισμένο ακέραιο. Φτιάξε array of records και συνάρτηση ασφαλούς μέγιστου.

Διάγνωση κρίσιμου ορίου

Array bounds και default types εξαρτώνται από διάλεκτο. Ενεργοποίησε range checks στο δοκιμαστικό build.

Pascal — Διαδρομή ουσιαστικής εξάσκησης

Περιβάλλον

Χρησιμοποίησε Free Pascal σε objfpc mode. Μην υποθέτεις ότι Turbo Pascal και Delphi έχουν ίδιο runtime. Θα αποθηκεύσεις δύο προϊόντα σε array of record και θα ελέγξεις την αριθμητική είσοδο πριν ενημερώσεις το απόθεμα.

Μικρό πρόγραμμα (ledger.pas)

program Ledger;
{$mode objfpc}
{$R+}
type
  TItem = record
    Name: string;
    Qty: Integer;
  end;
var
  Items: array[1..2] of TItem;
  Parsed, Code: Integer;
begin
  Items[1].Name := 'bolt';
  Val('7', Parsed, Code);
  if Code <> 0 then Halt(1);
  Items[1].Qty := Parsed;
  Items[2].Name := 'nut';
  Items[2].Qty := 2;
  WriteLn(Items[1].Qty + Items[2].Qty);
end.

Αναμενόμενο αποτέλεσμα: 9. Το Val δίνει μη μηδενικό Code όταν η συμβολοσειρά περιέχει μη έγκυρη τιμή. Η ποσότητα αποθηκεύεται μόνο μετά τον έλεγχο. Το array δέχεται δείκτες 1 και 2. Η οδηγία {$R+} ενεργοποιεί range checks σε Free Pascal· προσπέλαση του Items[3] σε δοκιμαστικό αντίγραφο πρέπει να εμφανίσει σφάλμα, όχι να γίνει κρυφή αλλοίωση.

Ασκήσεις και αποτυχίες

  1. Αντικατάστησε το '7' με '7x' και έλεγξε το Code. Η αποτυχημένη είσοδος δεν πρέπει να αλλάξει απόθεμα.
  2. Απαγόρευσε αρνητικές ποσότητες. Η σωστή μετατροπή αριθμού δεν σημαίνει σωστή τιμή πεδίου.
  3. Πρόσθεσε τρίτο προϊόν αφού αλλάξεις το μέγεθος του array. Παρακολούθησε τη συμπεριφορά bounds check.
  4. Χρησιμοποίησε δυναμικό array και περιέγραψε το κόστος αναζήτησης προϊόντος με όνομα.

Τεκμήρια

Κατάγραψε έκδοση Free Pascal, flags, source, κανονική/λανθασμένη έξοδο και diagnostic. Ο έλεγχος ορίων και ο έλεγχος overflow είναι διαφορετικοί μηχανισμοί. Αναφορά: https://www.freepascal.org/docs-html/current/prog/progsu65.html