This is my first post. I’m so excited to share my thoughts with you. I hope you enjoy reading it as much as I enjoyed writing it.

Some pascal code:

{
    PROGRAM BarCharts
    This program generates a bar chart based on user input.
}

PROGRAM BarCharts;

TYPE
    barNumbers = 1..40;
    numberOfPoints = 1..10;
    barChartData = ARRAY [barNumbers] OF numberOfPoints;

{
    FUNCTION Max
    Finds the maximum value in the given bar chart data.
    PARAMETERS:
        data: The bar chart data array.
        n: The number of data points to consider.
    RETURNS:
        The maximum value found in the data array.
}
FUNCTION Max(data: barChartData; n: INTEGER): numberOfPoints;
VAR 
    i: barNumbers;
    MaxNumber: numberOfPoints;
BEGIN
    MaxNumber := Low(barNumbers);
    FOR i := 1 TO n DO
        IF data[i] > MaxNumber THEN
            MaxNumber := data[i];

    Max := MaxNumber;
END;

{    
    PROCEDURE BarChart
    Generates and displays a bar chart based on the given data.
    PARAMETERS:
        ch: The character to use for the bars.
        n: The number of data points.
        data: The bar chart data array.
}

PROCEDURE BarChart(ch: CHAR; n: INTEGER; data: barChartData);
VAR 
    rows: 0..High(numberOfPoints);
    columns: barNumbers;
BEGIN
    WriteLn;

    // Main part
    rows := Max(data, n);
    WHILE rows > 0 DO
    BEGIN
        IF rows >= 10 THEN
            Write(rows, '|')
        ELSE 
            Write(' ', rows, '|');
        
        FOR columns := 1 TO n DO
        BEGIN
            IF data[columns] >= rows THEN
            BEGIN
                IF columns > 9 THEN
                    Write(' ');
                Write(' ', ch)
            END
            ELSE
            BEGIN
                IF columns > 9 THEN
                    Write(' ');
                Write('  ')
            END
        END;
        WriteLn;

        rows := rows - 1;
    END;

    // Footer part +-
    Write('  +');
    FOR columns := 1 TO n DO
    BEGIN
        IF columns > 9 THEN
            Write('-');
        Write('--');
    END;
    WriteLn;

    // Footer part 1..n
    Write('   ');
    FOR columns := 1 TO n DO
    BEGIN
        Write(' ', columns);
    END;
END;

VAR
    i, n: INTEGER;
    data: barChartData;
    c: CHAR;
BEGIN
    Write('ch: '); Read(c);
    Write('n: '); Read(n);

    Write('data: ');
    FOR i := 1 TO n DO
        Read(data[i]);

    BarChart(c, n, data);
END.