Ver Mensaje Individual
  #1  
Antiguo 01-05-2011
luisito2011 luisito2011 is offline
Miembro
NULL
 
Registrado: mar 2011
Posts: 82
Reputación: 14
luisito2011 Va por buen camino
Sacar promedio de Nro.. pares

ola.. soy yo .. siempre .. con algun problema.. que no puedo resolver..
bueno ahora..el ejercicio es este... //Ingresar un numero.. y sacar el promedio de los digitos pares//
bueno ahora les explico ....
aca esta mi unit.. con la que tengo que trabarjar este ejercicio...
necesito resolver... utilizando lo que tengo aca...( Yo ya lo hice.. pero me sale error en el momento de dividir...).. bueno les dejo toda la unit.. aun que no creo que este ejercicio se resuelva con lo que esta en private..
espero me ayuden ... gracias ...
saludos


Código Delphi [-]
 
Unit caja1;
Interface
Uses
    SysUtils,dialogs;
Type
    CEMNumeroNatural = Class(Exception);
    CNumeroNatural = Class
       Private
              Valor : Cardinal;
              Function UnidadesRom(u : Byte ) : string;
              Function DeLiRom    (dl: Byte ) : string;
              Function DecenasRom (d : Byte ) : string;
              Function CentenasRom(c : word ) : string;
              Function MilesRom   (m : word ) : string;
              Function Unidades(u : Byte ) : string;
              Function DeLi    (dl: Byte ) : string;
              Function Decenas (d : Byte ) : string;
              Function Centenas(c : word ) : string;
              Function Miles   (m : word ) : string;
       Public
             Constructor Crear;
             Procedure AsignarValor( NuevoValor : Cardinal);
             Procedure InsertarDigito( Posicion : Byte ; Digito : Byte);
             Procedure EliminarDigito( Posicion : Byte );
             Procedure Invertir;
             Function  ObtenerValor : Cardinal;
             Function  NumeroDigitos : Byte;
             Function  Digito( Posicion : Byte ) : Byte;
             Function  EsPrimo : Boolean;
             Function  EsPar : Boolean;
             Function  SumarDigitos : Byte;
             Function  DigitosPares : Byte;
             Function  DigitosImpares : Byte;
         
    End;
Implementation
//PRIVATE
//ROMANOS
Function CNumeroNatural.UnidadesRom(u : Byte) : string;
Var
   Uni : string;
Begin
      Case( u )of
           0: Uni := '';
           1: Uni := 'I';
           2: Uni := 'II';
           3: Uni := 'III';
           4: Uni := 'IV';
           5: Uni := 'V';
           6: Uni := 'VI';
           7: Uni := 'VII';
           8: Uni := 'VIII';
           9: Uni := 'IX';
      End;
      Result := Uni;
End;
Function CNumeroNatural.DeLiRom(dl : Byte) : string;
Var
   Li : string;
Begin
      Case( dl )of
           1: Li := 'X';
           2: Li := 'XX';
           3: Li := 'XXX';
           4: Li := 'XL';
           5: Li := 'L';
           6: Li := 'LX';
           7: Li := 'LXX';
           8: Li := 'LXXX';
           9: Li := 'XC';
      End;
      Result := Li ;
End;
Function CNumeroNatural.DecenasRom(d : Byte) : string;
Var
    Suma , Uni , Dec : string;
Begin
      Uni := UnidadesRom( d mod 10 );
      Dec := DeliRom( d div 10 );
      Case( d )of
           0..9   : Suma := Uni;
           10..99 : Suma := Dec + Uni;
      End;
      Result := Suma;
End;
Function CNumeroNatural.CentenasRom(c : word) : string;
Var
    K ,Dec : string;
Begin
      Dec := DecenasRom( c mod 100 );
      Case ( c div 100 ) of
           0: K :=          dec;
           1: K := 'C'    + dec;
           2: K := 'CC'   + dec;
           3: K := 'CCC'  + dec;
           4: K := 'CD'   + dec;
           5: K := 'D'    + dec;
           6: K := 'DC'   + dec;
           7: K := 'DCC'  + dec;
           8: K := 'DCCC' + dec;
           9: K := 'CM'   + dec;
      End;
      If( c = 100 )Then
         K := 'C';
      Result := K;
End;
Function CNumeroNatural.MilesRom(m : word) : string;
Var
    Q , Cent : string;
    Mi     : word;
Begin
      Cent := CentenasRom( m mod 1000 );
      Mi   := ( m div 1000 );
      Case( Mi )of
                 0: Q :=         cent;
                 1: Q := 'M'   + cent;
                 2: Q := 'MM'  + cent;
                 3: Q := 'MMM' + cent;
      End;
      Result:=Q;
End;
//LITERAL
Function CNumeroNatural.Unidades( u : Byte ) : string;
Var
   un : string;
Begin
     Case( u )of
          0: un:='';
          1: un:='Uno';
          2: un:='Dos';
          3: un:='Tres';
          4: un:='Cuatro';
          5: un:='Cinco';
          6: un:='Seis';
          7: un:='Siete';
          8: un:='Ocho';
          9: un:='Nueve';
     End;
     result := un;
End;
Function CNumeroNatural.DeLi    ( dl : Byte ) : string;
Var
   li : string;
Begin
     Case( dl )of
          2: li:='Veinte';
          3: li:='Treinta';
          4: li:='Cuarenta';
          5: li:='Cincuenta';
          6: li:='Sesenta';
          7: li:='Setenta';
          8: li:='Ochenta';
          9: li:='Noventa';
     End;
     result := li;
End;
Function CNumeroNatural.Decenas  ( d : Byte ) : string;
Var    s,uni,dec : string;
Begin
     uni := unidades( d Mod 10 );      dec := Deli( d Div 10 );
     Case( d )of
          0..9: s:=uni;
            10: s:='Diez';
            11: s:='Once';
            12: s:='Doce';
            13: s:='Trece';
            14: s:='Catorce';
            15: s:='Quince';
        16..19: s:='Dieci' + uni;
            20: s:=dec;
        21..29: s:='Veinti' + uni;
        30..99: s:=dec + ' y ' + uni;
     End;      If( d In [30,40,50,60,70,80,90] )Then         s := dec;
     result := s;
End;
Function CNumeroNatural.Centenas ( c : word ) : string;
Var
   k,dec : string;
Begin
      dec := Decenas( c Mod 100 );
      Case( c Div 100 )of
           0: k:='';
           1: k:='Ciento ' + dec;
           2: k:='Doscientos ' + dec;
           3: k:='Trescientos ' + dec;
           4: k:='Cuatrocientos ' + dec;
           5: k:='Quinientos ' + dec;
           6: k:='Seiscientos ' + dec;
           7: k:='Setecientos ' + dec;
           8: k:='Ochocientos ' + dec;
           9: k:='Novecientos ' + dec;
      End;       If( c = 100 )Then          k := 'Cien';      result := K;
End;
Function CNumeroNatural.Miles(m : word) : string;
Var
   Q  ,cent : string;   mi ,p    : word;
Begin
      cent := Centenas( m mod 1000) ;       mi   := ( m div 1000 );
      Case( mi )of
                  0: Q:='';
                  1: Q:='Un Mil ' + cent;
               2..9: Q:=Unidades(mi) + ' Mil ' + cent;
             10..99: Q:=Decenas (mi) + ' Mil ' + cent;
           100..999: Q:=Centenas(mi) + ' Mil ' + cent;
      End;
      p := pos( 'Uno Mil' , Q );
      If( p > 0 )Then
           delete(Q , p+2 ,1);
      result := Q;
   end;
//PUBLIC
Constructor CNumeroNatural.Crear;
Begin
     Valor := 0;
End;
Procedure CNumeroNatural.AsignarValor( NuevoValor : Cardinal);
Begin
     Valor := NuevoValor;
End;
Procedure CNumeroNatural.InsertarDigito     ( Posicion : Byte ; Digito : Byte);
Var
   Aux , Aux2 , Digi :Cardinal;
Begin
     Aux := Valor;
     If( Posicion > 0)and( Posicion <= NumeroDigitos )Then
     Begin
          Aux2 := 0;           Digi := 0;
          While( Digi <= NumeroDigitos-Posicion )do
          Begin
               Aux2 := ( Aux2 * 10 ) + Aux Mod 10;    Aux  :=   Aux Div 10;      Inc( Digi );
          End;
          Aux := ( Aux * 10 ) + Digito;//Inserta Digito
          While( Digi > 0 )do
          Begin
             Aux   := ( Aux * 10 ) + ( Aux2 Mod 10 );  Aux2  :=   Aux2 Div 10;      Dec( Digi );
          End;
          Valor := Aux;
     End
     Else
       Raise CEMNumeroNatural.Create
         ('CNumeroNatural.InsertarDigito: Error Fuera de RANGO...');
End;
Procedure CNumeroNatural.EliminarDigito( Posicion : Byte );
Var
   Aux , Aux2 , Digi :Cardinal;
Begin
     Aux := Valor;
     If( Posicion > 0)and( Posicion <= NumeroDigitos )Then
     Begin
          Aux2 := 0;
          Digi := 0;
          While( Digi < NumeroDigitos-Posicion )do
          Begin
               Aux2 := ( Aux2 * 10 ) + Aux Mod 10;
               Aux  :=   Aux Div 10;
               Inc( Digi );
          End;
          Aux := ( Aux Div 10 );//Elimina Digito
          While( Digi > 0 )do
          Begin
             Aux   := ( Aux * 10 ) + ( Aux2 Mod 10 );
             Aux2  :=   Aux2 Div 10;
             Dec( Digi );
          End;
          Valor := Aux;
     End
     Else
       Raise CEMNumeroNatural.Create
            ('CNumeroNatural.EliminarDigito: Error Fuera de RANGO...');
End;
Procedure CNumeroNatural.Invertir;
Var
   Aux , Aux2 , i :Cardinal;
Begin
     Aux2 := Valor;
     Aux  := 0;
     i    := 0;
     While( i < NumeroDigitos )do
     Begin
          Aux  := ( Aux * 10 ) + Aux2 Mod 10;
          Aux2 :=   Aux2 Div 10;
          Inc( i );
     End;
     Valor := Aux;
End;
Function  CNumeroNatural.ObtenerValor : Cardinal;
Begin
     Result := Valor;
End;
Function  CNumeroNatural.NumeroDigitos : Byte;
Var
   Aux : Cardinal;
   Cant : Byte;
Begin
     Aux := Valor;
     Cant := 0;
     Repeat
        Aux := Aux Div 10;
        Inc( Cant );
     Until(Aux = 0);
     Result := Cant;
End;
Function  CNumeroNatural.Digito( Posicion : Byte ) : Byte;
Var
   Aux : Cardinal;
   Digi , Digito : Byte;
Begin
     Aux := Valor;
     Digi := 0;
     if( Posicion > 0 )and( Posicion <= NumeroDigitos )then
     Begin
          Repeat
             Digito := Aux Mod 10;
             Aux := Aux Div 10;
             Inc( Digi );
          Until( Digi > NumeroDigitos-Posicion );
          Result := Digito;
     End
     Else
         Raise CEMNumeroNatural.Create
               ('CNumeroNatural.Digito: Error Fuera de RANGO...');
End;
 
 
 

Function  CNumeroNatural.EsPrimo : Boolean;
Var
   i , n : word;
   sw  : boolean;
Begin
      sw := true;
      i  := 2;
      while(i <= ( Valor div 2 ) ) and ( sw = true ) do
      Begin
           n := Valor mod i;
           if( n = 0 )then
              sw := false;
           i := i + 1 ;
      End;
      result := sw;
End;
Function  CNumeroNatural.EsPar : Boolean;
Begin
  Result := (valor mod 2)= 0 ;
End;
Function  CNumeroNatural.SumarDigitos : Byte;
Var
   Aux , Suma : Cardinal;
Begin
     Aux := Valor;
     Suma := 0;
     Repeat
        Suma := Suma +( Aux Mod 10 );
        Aux := Aux Div 10;
     Until( Aux = 0 );
     Result := Suma;
End;
Function  CNumeroNatural.DigitosPares : Byte;
Var
   Aux : Cardinal;
   Cant , Digito : Byte;
Begin
     Aux := Valor;
     Cant := 0;
     Repeat
        Digito := Aux Mod 10;
        Aux := Aux Div 10;
        If( Digito mod 2 = 0 )Then
            Inc( Cant );
     Until( Aux = 0 );
     Result := Cant;
End;
Function  CNumeroNatural.DigitosImpares : Byte;
Begin
     Result := NumeroDigitos-DigitosPares;
End;
End.
Responder Con Cita