Programación en Ada/Tipos/Enteros

De testwiki
Revisión del 23:06 6 abr 2024 de imported>ManuelGR (Ejemplo: Eliminar enlaces incorrectos)
(difs.) ← Revisión anterior | Revisión actual (difs.) | Revisión siguiente → (difs.)
Ir a la navegación Ir a la búsqueda

Plantilla:Navegador

Tipos enteros con signo

Un tipo entero con signo se define declarando un rango, por ejemplo:

Plantilla:Ada/Reservada Índice Plantilla:Ada/Reservada Plantilla:Ada/Reservada 1 .. 50;

Los extremos del rango se pueden consultar con los Plantilla:Ada: 'First y el 'Last del tipo.

Cuando se asigna un valor a una Plantilla:Ada: de este tipo, se chequea en tiempo de ejecución si pertenece al rango. En caso negativo se levanta la Plantilla:Ada: Constraint_Error.

El compilador puede definir el tamaño más eficiente para el tipo a no ser que se defina una Plantilla:Ada:.

Plantilla:Ada/Reservada Índice Plantilla:Ada/Reservada Plantilla:Ada/Reservada 1 .. 50;
Plantilla:Ada/Reservada Índice'Size Plantilla:Ada/Reservada 8;

Ejemplo

El siguiente ejemplo, tomado del wikilibro en inglés sobre Ada, define un nuevo rango de -5 a 10 e imprime el rango completo.

Plantilla:Ada/Reservada Ada.Text_IO;

Plantilla:Ada/Reservada Range_1
Plantilla:Ada/Reservada
  Plantilla:Ada/Reservada Range_Type Plantilla:Ada/Reservada Plantilla:Ada/Reservada -5 .. 10;

  Plantilla:Ada/Reservada T_IO Plantilla:Ada/Reservada Ada.Text_IO;
  Plantilla:Ada/Reservada I_IO Plantilla:Ada/Reservada Plantilla:Ada/Reservada  Ada.Text_IO.Integer_IO (Range_Type);

Plantilla:Ada/Reservada
  Plantilla:Ada/Reservada A Plantilla:Ada/Reservada Range_Type Plantilla:Ada/Reservada
     I_IO.Put (
        Item  => A,
        Width => 3,
        Base  => 10);

     Plantilla:Ada/Reservada A < Range_Type'Last Plantilla:Ada/Reservada
        T_IO.Put (",");
     Plantilla:Ada/Reservada
        T_IO.New_Line;
     Plantilla:Ada/Reservada Plantilla:Ada/Reservada;
  Plantilla:Ada/Reservada Plantilla:Ada/Reservada;
Plantilla:Ada/Reservada Range_1;

Tipos enteros con signo predefinidos

En el Plantilla:Ada: se predefinen varios tipos enteros con signo, como Integer (y sus subtipos Natural y Positive), Short_Integer, Long_Integer y posiblemente otros (dependiendo del compilador). Estos tipos tienen los tamaños más adecuados para la arquitectura del computador. Si no tienes razones para definir nuevos tipos enteros, considera usar estos tipos o un subtipo de ellos.

Esta sería una posible representación gráfica de los subtipos de Integer:

<timeline> ImageSize = width:535 height:100 PlotArea = width:480 height:60 left:50 bottom:20 TimeAxis = orientation:horizontal DateFormat = yyyy Define $first = -20 Define $last = 20 Period = from:$first till:$last AlignBars = early Colors =

 id:canvas value:rgb(1,1,0.85)
 id:grey value:gray(0.5)

ScaleMajor = unit:year increment:1000 start:0 gridcolor:grey BackgroundColors = canvas:canvas PlotData =

 width:2
 bar:Positive from:1 till:$last color:blue
 bar:Positive at:1 text:"Positive'First=1" shift:(3,3) fontsize:M
 bar:Natural from:0 till:$last color:green
 bar:Natural at:0 text:"Natural'First=0" shift:(3,3) fontsize:M
 bar:Integer from:$first till:$last color:red
 bar:Integer at:0 mark:(line, black)
 bar:Integer at:1 mark:(line, black)
 bar:Integer at:1 text:"1" shift:(0,3)
 bar:Integer at:$first text:"Integer'First" align:left shift:(3,3) fontsize:M
 bar:Integer at:$last text:"Integer'Last" align:right shift:(-1,3) fontsize:M

</timeline>

Enteros modulares

Los enteros modulares no tienen signo y son cíclicos, es decir no se produce desbordamiento (overflow) sino wrap-around. Para estos tipos están predefinidos los Plantilla:Ada: lógicos (and, or, xor) para realizar operaciones a nivel de bits.

Se definen así:

Plantilla:Ada/Reservada Nombre Plantilla:Ada/Reservada Plantilla:Ada/Reservada Módulo;

Donde el 'First es 0 y 'Last es Módulo - 1. Como los tipos modulares son cíclicos last+1first y first1last.

Se puede definir un Plantilla:Ada: de un tipo modular:

Plantilla:Ada/Reservada Byte Plantilla:Ada/Reservada Plantilla:Ada/Reservada 256;
Plantilla:Ada/Reservada Medio_Byte Plantilla:Ada/Reservada Byte Plantilla:Ada/Reservada 0 .. 127;

Pero, cuidado porque el módulo de Medio_Byte sigue siendo 256.

Manual de referencia de Ada

en:Ada Programming/Types/mod en:Ada Programming/Types/range