Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Insertar digito 9 pocision 3 (https://www.clubdelphi.com/foros/showthread.php?t=73573)

luisito2011 02-05-2011 20:20:05

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.

oscarac 02-05-2011 21:04:02

puedes usar la instruccion Copy

Código Delphi [-]
 
copy (cadena,1,2) + '9' + copy(cadena,3,maxint(cadena)

luisito2011 02-05-2011 21:26:20

Necesito resolver el ejercicio usando.. la Unit.. que esta arriba

luisgutierrezb 02-05-2011 22:03:29

pues la unit trae este procedimiento:

Procedure CNumeroNatural.InsertarDigito ( Posicion : Byte ; Digito : Byte);

luisito2011 02-05-2011 22:26:32

ups... y como la uso... pliz

ecfisa 02-05-2011 22:46:27

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. :)

luisito2011 02-05-2011 22:55:30

mm.. si ... toncej se supone que deveria quedar ai
pero me sale error

Código Delphi [-]
 
var
  a: CNumeroNatural;
  x:integer;
begin
a:=cnumeronatural.Crear;
WriteLn('Digite Un Numero'); Readln(x);
A.AsignarValor(x);
WriteLn('Nuevo Numero ',a.InsertarDigito(3,9));
readln;

Creo que es.. la forma como llamo.. aver si me corrigen
saludos

ecfisa 02-05-2011 23:15:01

Hola Luisito.

Creo que deberías mostrarlo así:
Código Delphi [-]
var
  a: CNumeroNatural;
  x:integer;
begin
  a:=cnumeronatural.Crear;
  WriteLn('Digite Un Numero'); Readln(x);
  A.AsignarValor(x);
  a.InsertarDigito(3,9); 
  WriteLn('Nuevo Numero ',a.ObtenerValor);
  readln;

Un saludo.

duilioisola 03-05-2011 15:46:00

Cita:

Creo que es.. la forma como llamo.. aver si me corrigen
mm.. si ... entonces(no era una palabra) se supone que debería(con B) quedar así(tampoco era una palabra)
pero me sale un error

Código Delphi
[...]

Creo que es la forma como llamo a la función. A ver (con espacio, son dos palabras) si me corrigen


La franja horaria es GMT +2. Ahora son las 16:58:54.

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