Calcular+limite+del+sumatorio

=__**Cálculo del valor límite de un sumatorio**__=

Encontrar el mayor número NUM, entero y positivo, para el cual se cumpla:

1 + 2 + 3 + ... + NUM <= LIMITE

donde LIMITE sea un valor leído por teclado.

> ** iSerie nunca alcanzará un valor superior a iLimite ** code format="pascal" PROGRAM Repet_4A ; VAR iNum, iLimite, iSucesion : Integer ; BEGIN Write ('Escribe la cifra límite (Nº positivo): ') ; Readln (iLimite) ;
 * ERROR : Si iLimite es próximo a MAXINT **

iSucesion := 0  ; iNum      := 0  ;

REPEAT iNum      :=  iNum + 1 ; iSucesion :=  iSucesion + iNum ; UNTIL iLimite  <  iSucesion ;

{ último valor añadido: iNum – 1 }

Writeln ('El valor límite de la sucesión es: ', iNum - 1) ; Writeln ('       La suma de la sucesión es: ', iSucesion - iNum) ; END. code > ** CORRECTO : // antes de hacer la suma se comprueba //** que no vaya a haber overflow de Integers code format="pascal" PROGRAM Repet_4B ; VAR iNum, iLimite, iSucesion : Integer ; BEGIN Write ('Escribe la cifra límite (Nº positivo): ') ; Readln (iLimite) ;

iSucesion := 0  ; iNum      := 0  ;

REPEAT iNum      :=  iNum + 1 ; iSucesion :=  iSucesion + iNum ; UNTIL (iLimite - iSucesion) < (iNum + 1) ;

Writeln ('El valor límite de la sucesión es: ', iNum) ; Writeln ('       La suma de la sucesión es: ', iSucesion) ; END. code > ** CORRECTO : // antes de hacer la suma se comprueba //** que no vaya a haber overflow de Integers code format="pascal" PROGRAM Repet_3A ; VAR iNum, iLimite, iSucesion : Integer ; BEGIN Write ('Escribe la cifra límite (Nº positivo): ') ; Readln (iLimite) ;

iSucesion := 0 ; iNum      := 0 ;

WHILE (iNum + 1) <=  (iLimite - iSucesion)  DO      BEGIN iNum      :=  iNum + 1 ; iSucesion :=  iSucesion + iNum ; END ;

Writeln ('El valor límite de la sucesión es: ', iNum) ; Writeln ('       La suma de la sucesión es: ', iSucesion) ; END. code

> ** CORRECTO : // se toma la Sucesión como número de tipo Real que tiene un rango de valores superior al de los Integers //** > ** PERO ES PREFERIBLE ALGUNA DE LAS OPCIONES CORRECTAS ANTERIORES ** code format="pascal" PROGRAM Repet_4D ; VAR iNum, iLimite : Integer ; rSucesion : Real ; BEGIN Write ('Escribe la cifra límite (Nº positivo): ') ; Readln (iLimite) ;

rSucesion := 0.0  ; iNum         := 0  ;

REPEAT iNum      :=  iNum + 1 ; rSucesion :=  rSucesion + iNum ; UNTIL iLimite  <  rSucesion ;

{ último valor añadido: iNum – 1 }

Writeln ('El valor límite de la sucesión es: ', iNum - 1) ; Writeln ('       La suma de la sucesión es: ', rSucesion - iNum:0:0) ; END. code