Corrigé C2.  Enoncé

Aspect algorithmique

A-a) S Somme des nombres positifs et celle des nombres négatifs

    ALGORITHME Somme

    VAR N, Somp, Somn, I, Nombre : ENTIER
    DEBUT
        LIRE (N)
        POUR I=1, N
            LIRE(Nombre)
            SI Nombre > 0 :
                Somp := Somp + Nombre
            SINON
                Somn := Somn + Nombre
            FSI
        FINPOUR
        ECRIRE (Somp, Somn)
    FIN

A-b) Nombre de sous-suites croissantes

    ALGORITHME Nombre
    VAR N, Prec, Nbre, Nb, I : ENTIER
    DEBUT
        Nb := 1
        LIRE(N) ; LIRE(Prec)
        POUR I=2, N
            LIRE(Nbre)    
            SI Prec < Nbre :
                Nb := Nb + 1
            FSI
            Prec := Nbre
        FINPOUR
        ECRIRE( Nbre )
    FIN

B. Recherche des nombres amis inférieurs à 1000.

    ALGORITHME Amis
    VAR I, J, K, A, N : ENTIER
    DEBUT
        POUR I=1, 1000 :
            POUR J= I, 1000 :
                A := I2 + J2
                { Est-ce un carré parfait ? }
                N := A DIV 2
                Carré := FAUX
                K := 1
                TANTQUE K <= N ET NON Carré
                    SI K2 = A :
                        ECRIRE(I, J)
                        Carré := VRAI
                    FSI
                    K := K + 1
                FINTANTQUE
            FINPOUR
        FINPOUR
    FIN

2. Aspect Programmation

2-a) Traduction de B)

    PROGRAM Amis;
    VAR     I, J, K, A, N : INTEGER;
        Carre : BOOLEAN;
    BEGIN
        FOR I:=1 TO 1000 DO
            FOR J:= I TO 1000 DO
                BEGIN
                    A := SQR(I) + SQR(J);
                    { Est-ce un carré parfait ? }
                    N := A DIV 2;
                    Carre := FALSE;
                    K := 1;
                    WHILE( K <= N AND NOT Carre ) DO
                        BEGIN
                            IF SQR(K) = A THEN
                            BEGIN
                                WRITELN(I, J);
                                Carre := TRUE
                            END;
                            K := K + 1
                        END
                END
    END.

2-b) Impression du dessin :

    PROGRAM Triangle;
    VAR N, I, J : INTEGER ;
    BEGIN
        READ(N);
        WRITELN('*', 21);
        WRITELN('**', 22);
        FOR I:=1 TO N DO
            BEGIN
                WRITE('*': 21);
                FOR J:=1 TO I DO WRITE(I:1);
                WRITELN('*');
            END
    END.