Contar+Positivos+y+Negativos

=__**Contar Positivos y negativos**__=

Programa que lee una secuencia de numeros reales y cuenta cuántos de ellos son positivos y cuántos son negativos.

El programa finaliza cuando el usuario introducel el valor 0.


 * Versión 1: con bucle WHILE - DO **
 * Primera lectura de números fuera del bucle y todas las demás dentro del bucle. **

code format="pascal" PROGRAM Pos_Neg1 ; VAR rNumero : Real ; iPosit, iNegat : Integer ; { Contadores de nº positivos y negativos } BEGIN iPosit := 0 ; { Inicialización del contador de números positivos } iNegat := 0 ; { Inicialización del contador de números negativos }

WriteLn ('Programa que cuenta números positivos y negativos') ; Writeln ;

Write ('Escribe un número ( 0 para terminar ): ') ; ReadLn (rNumero) ;

WHILE rNumero <> 0 DO        BEGIN IF rNumero > 0 THEN iPosit := iPosit + 1 { o bien: Inc (iPosit) } ELSE { si no es positivo es negativo (se sabe qu no es 0) } iNegat := iNegat + 1 ; { o bien: Inc (iNegat) }

{ "fase de preparación para la siguiente iteración" } Write ('Escribe un número (0 para terminar): ') ; ReadLn (rNumero) ; END ;

WriteLn ('Ha habido ', iPosit, ' números positivos') ; WriteLn ('Ha habido ', iNegat, ' números negativos') ; ReadLn ; END. (* FIN DEL PROGRAMA POS_NEG1.PAS *) code
 * Versión 2: con bucle WHILE - DO **
 * Todas las lecturas dentro del bucle. **

code format="pascal" PROGRAM Pos_Neg2 ; VAR rNumero : Real ; iPosit, iNegat : Integer ; { Contadores de nº positivos y negativos } BEGIN iPosit := 0 ; { Inicialización del contador de números positivos } iNegat := 0 ; { Inicialización del contador de números negativos }
 * No es muy clara **

WriteLn ('Programa que cuenta números positivos y negativos') ; Writeln ;

rNumero := 1 ; { cualquier valor diferente de VALOR_FINAL } { para que siempre se entre en el bucle }

WHILE rNumero <> 0 DO       BEGIN Write ('Escribe un número ( 0 para terminar ): ') ; ReadLn (rNumero) ;

IF rNumero > 0 THEN iPosit := iPosit + 1 ; { o bien: Inc (iPosit) }

{ si no es positivo puede ser negativo o puede ser 0 } IF rNumero < 0 THEN iNegat := iNegat + 1 ; { o bien: Inc (iNegat) } END ;

WriteLn ('Ha habido ', iPosit, ' números positivos') ; WriteLn ('Ha habido ', iNegat, ' números negativos') ; ReadLn ; END. (* FIN DEL PROGRAMA POS_NEG2.PAS *) code


 * Versión 3: con bucle REPEAT - UNTIL ( similar a la anterior pero mucho mas clara ) **
 * Todas las lecturas dentro del bucle. **

code format="pascal" PROGRAM Pos_Neg3 ; VAR rNumero : Real ; iPosit, iNegat : Integer ; { Contadores de nº positivos y negativos } BEGIN iPosit := 0 ; { Inicialización del contador de números positivos } iNegat := 0 ; { Inicialización del contador de números negativos }

WriteLn ('Programa que cuenta números positivos y negativos') ; Writeln ;

REPEAT Write ('Escribe un número (0 para terminar): ') ; ReadLn (rNumero) ;

IF rNumero > 0 THEN iPosit := iPosit + 1 ; { o bien: Inc (iPosit) }

{ si no es positivo puede ser negativo o puede ser 0 } IF rNumero < 0 THEN iNegat := iNegat + 1 ; { o bien: Inc (iNegat) }

UNTIL rNumero = 0 ;

WriteLn ('Ha habido ', iPosit, ' números positivos') ; WriteLn ('Ha habido ', iNegat, ' números negativos') ; ReadLn ; END. (* FIN DEL PROGRAMA POS_NEG3.PAS *) code