1
Procedural languages (C, Pascal, FORTRAN) organize a program as a sequence of instructions/procedures that operate step-by-step on data.
2
Data types are classified as Primitive/basic (int, float, char, boolean), Derived (array, pointer, structure), and User-defined (enum, typedef, class).
3
An Abstract Data Type (ADT) is defined purely by the operations it supports (its behavior), NOT by how it is implemented internally โ e.g. Stack, Queue, and List are ADTs; a Stack ADT is defined by push/pop regardless of whether it uses an array or a linked list.
4
Structured programming organizes a program using exactly three basic control structures: Sequence (statements executed in order), Selection (if/switch), and Iteration (loops) โ improving readability, testability, and reuse.
5
**Syntax** is the set of grammatical rules defining how valid statements/programs must be written, while **Semantics** is the meaning of a syntactically correct statement โ i.e. what it actually does when it runs.
6
A user-defined function is a block of code written by the programmer to perform a specific task; it is invoked through a function call and may return a value to the caller.
7
A recursive function is a function that calls itself, either directly or indirectly, to solve a problem by breaking it into smaller sub-problems (e.g. factorial, Fibonacci).
8
Every recursive function needs a base case to terminate the recursion; each call adds a new activation record onto the call stack until the base case is reached.
9
Arrays: a 1-D array is a single row/list accessed by one index (arr[i]); a 2-D array is a table of rows x columns accessed by two indices (arr[i][j]); a multi-dimensional array uses three or more indices (arr[i][j][k]).
10
In C, a string is an array of characters terminated by the null character '\0'; key library functions are strlen() (length), strcpy() (copy), strcat() (concatenate), and strcmp() (compare).
11
The RAM (Random Access Machine) model is an idealized single-processor computer used for analyzing algorithms: it assumes every simple operation (arithmetic, comparison, assignment, or memory access) takes a constant amount of time, O(1), letting running time be measured simply by counting elementary steps, independent of real hardware speed.
12
Concurrency means multiple computations are in progress during overlapping time periods, potentially executing simultaneously on multiple processors (parallelism); processes then communicate either via **message passing** (explicit send/receive, used in loosely coupled/distributed systems with no shared memory) or **shared memory** (a common memory area, used in tightly coupled multiprocessor systems, requiring synchronization).
13
The PRAM (Parallel Random Access Machine) is a theoretical model for parallel algorithm analysis, assuming multiple processors share a common memory with uniform, unit-time access.
14
A Monitor encapsulates shared data together with the procedures that operate on it, and the language/runtime automatically enforces mutual exclusion between those procedures, whereas a Semaphore is an integer synchronization variable manipulated only by the atomic wait() (P) and signal() (V) operations, used to control access to shared resources.