Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 02-05-2011
luisito2011 luisito2011 is offline
Miembro
NULL
 
Registrado: mar 2011
Posts: 82
Poder: 14
luisito2011 Va por buen camino
Insertar digito 9 pocision 3

bueno.. aca otro problemita...
// Pida un numero por teclado e inserte el digito 9 en la 3 posicion de dicho numero... Sin usar IF - WHILE - REPEAT //
Tambien utilizando esta unidad..
Ejemplo.. N = 123456789
N = 129456789


Código Delphi [-]
 
Unit caja1;
Interface
Uses
    SysUtils,dialogs;
Type
CEMNumeroNatural = Class(Exception);
    CNumeroNatural = Class
       Private
              Valor : Cardinal;
              Function UnidadesRom(u : Byte ) : 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;

//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.

Última edición por luisito2011 fecha: 02-05-2011 a las 20:26:27.
Responder Con Cita
  #2  
Antiguo 02-05-2011
Avatar de oscarac
[oscarac] oscarac is offline
Miembro Premium
 
Registrado: sep 2006
Ubicación: Lima - Perú
Posts: 2.010
Poder: 20
oscarac Va por buen camino
puedes usar la instruccion Copy

Código Delphi [-]
 
copy (cadena,1,2) + '9' + copy(cadena,3,maxint(cadena)
__________________
Dulce Regalo que Satanas manda para mi.....
Responder Con Cita
  #3  
Antiguo 02-05-2011
luisito2011 luisito2011 is offline
Miembro
NULL
 
Registrado: mar 2011
Posts: 82
Poder: 14
luisito2011 Va por buen camino
Necesito resolver el ejercicio usando.. la Unit.. que esta arriba
Responder Con Cita
  #4  
Antiguo 02-05-2011
luisgutierrezb luisgutierrezb is offline
Miembro
 
Registrado: oct 2005
Ubicación: México
Posts: 925
Poder: 19
luisgutierrezb Va por buen camino
pues la unit trae este procedimiento:

Procedure CNumeroNatural.InsertarDigito ( Posicion : Byte ; Digito : Byte);
Responder Con Cita
  #5  
Antiguo 02-05-2011
luisito2011 luisito2011 is offline
Miembro
NULL
 
Registrado: mar 2011
Posts: 82
Poder: 14
luisito2011 Va por buen camino
ups... y como la uso... pliz
Responder Con Cita
  #6  
Antiguo 02-05-2011
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Pero Luisito... vos mismo hiciste esa función, se supone que deberías saber como se la llama...

Tomando en cuenta el título: 'Insertar digito 9 pocision 3', creo que sería:
Código Delphi [-]
var
  nn: CNumeroNatural;
begin
  ...
  nn.Valor:= 123456789;
  nn.InsertarDigito(3, 9);
  ...
end;

Un saludo.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Eliminar un digito y mostrar el digito eliminado luisito2011 Varios 17 01-04-2011 05:27:17
Dígito Verhoeff Antonio Rosas E OOP 1 04-10-2007 23:51:19
Comparar un number dígito a dígito kuan-yiu SQL 2 25-06-2007 17:26:47
Orden aleatorio al 7o digito!!! jdattoli Tablas planas 1 20-10-2005 18:15:09
Modificar un str dígito a dígito fortran Varios 11 22-12-2003 16:44:46


La franja horaria es GMT +2. Ahora son las 20:27:49.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi