P_38_E29-Triangulo+de+letras

=__**Triangulo de letras**__=

Programa: Escribe un triangulo del tipo:

>> A >> BC >> DEF >> GHIJ >> KLMNO >> PQR###

Compuesto de tantas letras como el valor de un número leído por teclado.

La última línea se rellena, si hace falta con el carácter #.

code format="pascal" PROGRAM REPET_29 ; CONST cRELLENO = '#' ; VAR iNumLetras, iMaxCaractEnLinea, iColumna, iLetrasEscritas : Integer ; cLetra : Char ; BEGIN (* Leer el n£mero de letras a mostrar *) Write ('Escribe n£mero de letras (menor de 26): ') ; Readln (iNumLetras) ;

IF (iNumLetras <= 0) OR (26 < iNumLetras) THEN Writeln ('ERROR: Debe ser un n£mero positivo entre 1 y 26') ELSE BEGIN cLetra := 'A' ;               (* Inicializar la letra a mostrar  *) iLetrasEscritas := 0 ;        (* Inicializar n§ letras mostradas *) (* Inicializar n§ de caracteres a mostrar en la l¡nea actual *) (* Coincide con el n£mero de l¡nea                          *) iMaxCaractEnLinea := 1 ;

WHILE iLetrasEscritas < iNumLetras DO        BEGIN (* Escribir una l¡nea *) FOR iColumna := 1 TO iMaxCaractEnLinea DO            BEGIN             (* Si no se han escrito todas las letras *) (* mostrar la siguiente                 *) IF iLetrasEscritas < iNumLetras THEN BEGIN Write (cLetra) ; cLetra := Succ (cLetra) END ELSE     (* En caso contrario mostrar caracter de relleno *) Write (cRELLENO) ; iLetrasEscritas := iLetrasEscritas + 1 ; END ; (* for *)

Writeln ;                                  (* Saltar de l¡nea *)

(* Se va a pasar a escribir en la siguiente l¡nea        *) (* Incrementar contador de caracteres en la l¡nea actual *) iMaxCaractEnLinea := iMaxCaractEnLinea + 1 END (* while *) END (* else *) Realn ; END. (* Fin de REPET_29.PAS *) code

Otra versión:

code format="pascal" PROGRAM REPET_29 ; CONST cRELLENO = '#' ; VAR i, iNumLetras, iNumLinea, iColumna, iLetrasEscritas : Integer ; cLetra : Char ; BEGIN (* Leer el n£mero de letras a mostrar *) Write ('Escribe n£mero de letras (menor de 26): ') ; Readln (iNumLetras) ;

IF (iNumLetras <= 0) OR (26 < iNumLetras) THEN Writeln ('ERROR: Debe ser un n£mero positivo entre 1 y 26') ELSE BEGIN cLetra := 'A' ;               (* Inicializar la letra a mostrar  *) iLetrasEscritas := 0 ;        (* Inicializar n§ letras mostradas *) (* Inicializar n§ de caracteres a mostrar en la l¡nea actual *) (* Coincide con el n£mero de l¡nea                          *)

cLetra     := 'A' ;                       { Inicializar la letra a mostrar                   } iNumLinea  := 1   ;                       { Inicializar nº de caracteres en la línea actual  } iColumna   := 0   ;                       { Inicializar número de columna donde escribir } FOR iLetrasEscritas  := 1 TO  iNumLetras  DO           BEGIN Write (cLetra) ;                                { Escribir letra } cLetra     := Succ (cLetra) ;                   { Pasar a la siguiente letra } iColumna := iColumna + 1 ; IF iColumna = iNumLinea THEN BEGIN WriteLn ;                                   { Saltar de línea             } iNumLinea := iNumLinea + 1 ;                { Incrementar siguiente línea } iColumna  := 0  ;                           { Inicializar columna         } END ; END ;

IF iColumna <> 0 THEN  { Si no se finalizado la línea } BEGIN FOR i := iColumna  TO  iNumLinea  DO                 Write ('#') ;                               { Escribir carácter de relleno: # } Writeln ; END ; END ;

Realn ; END. (* Fin de REPET_29.PAS *) code