Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Eliminar un digito y mostrar el digito eliminado (https://www.clubdelphi.com/foros/showthread.php?t=73093)

luisito2011 31-03-2011 04:40:19

Eliminar un digito y mostrar el digito eliminado
 
hola bueno tengo un problemita...necesito adicionar a este codigo..
2 funciones oh 2 procesos...
el cual 1 me elimine cualquier digito de un numero
y otro que muestre el digito eliminado
Código Delphi [-]
 
type
  numero=record
    valor : integer;
  end;

procedure asignarvalor(var n:numero; que:integer);
begin
  n.valor:=que
end;

function obtenervalor(n:numero):integer;
begin
  obtenervalor:=n.valor;
end;

procedure crear(var N:numero);
begin
  n.valor:=0;
end;

function nrodigitos(N:numero):integer;
var 
  c:integer;
begin
  c:=0;
  while n.valor>0 do
  begin
    c:= c+1;
    n.valor:=n.valor div 10;
  end;
  nrodigitos:=C;
end;

var
  a:numero;
  k:integer;
begin
  crear(A);
  readln (K);
  asignarvalor(A,k);
  writeln('El numero es ',obtenervalor(a));
  writeln('el numero de digitos es ',nrodigitos(A));
  readln;
end

saludos. y gracias

ecfisa 31-03-2011 05:16:33

Hola luisito2011.
Cita:

necesito adicionar a este codigo..
2 funciones oh 2 procesos...
el cual 1 me elimine cualquier digito de un numero y otro que muestre el digito eliminado
En realidad no necesitas dos procedimientos o funciones, te podes arreglar con una función:
Código Delphi [-]
...
function EliminarDigito(var n: numero; Pos:Integer): Integer;
var
  s: string;
  r,cd: Integer;
begin
  Str(n.valor, s);     (* convertir a string *)
  Val(s[Pos], r, cd);  (* valor dígito eliminado en r *)
  Delete(s, Pos, 1);   (* borrar dígito *)
  Val(s, n.valor, cd); (* convertir (numero - digito) a integer *)
  EliminarDigito:= r;  (* devuelve valor dígito eliminado *)
end;


var
  a:numero;
  k:integer;
  d:Integer;
begin
  crear(A);
  write('Numero: '); Readln(K);
  AsignarValor(a, k);
  Writeln('El numero es ', obtenervalor(a));
  Writeln('el numero de digitos es ',nrodigitos(A));
  Write('Digito a eliminar: '); Readln(d);
  Writeln('Digito eliminado: ',EliminarDigito(a, d));
  Readln;
end.

Nota: Usé sintáxis Pascal por si te es requerido. Toda explicación del uso de las funciones la encontras en la ayuda de Pascal/Delphi.

Un saludo.

luisito2011 31-03-2011 05:57:40

muy buena respuesta.. gracias.. en realidad necesitaba en 2 funciones o procesos.. por que el que 1 elimina.. tenia que ponerla en un until.. el cual despue pueda usarlo en console application.. pero esta bien .. gracias ..
saludos

Delphius 31-03-2011 17:33:20

Hola,

¿Puedo preguntar que significa eliminar un dígito? Porque yo al menos entiendo dos posibles razonamientos. Supongamos que tenemos el número 4562. Se eliminará el 6:

Opción 1: Nos queda un número de 3 cifras:
4562 -> 45X2 -> 452

Opción 2: Restamos 6 decenas al número, sigue siendo de 4 cifras:

4562 - 60 = 4502.

¿Se entiende? ;)

Por cierto... eso de convertir a string para luego pasarlo a integer me parece más un intento de cañonazo. Se que este artilugio puede resultar fácil, y reducir líneas... pero si en es que luisito está recién comenzando en programación en alguna universidad o instituto me parece que el objetivo del profe no es que vaya a por esos artilugios sino que exprima su capocha hasta encontrar un algoritmo que no recurra a esas técnicas sino que lo haga de forma directa (que se puede). :rolleyes: ;)

Saludos,

rgstuamigo 31-03-2011 18:27:51

Me parece que se trata de la primera Opcion...Delphius...:) y estoy totalmente de acuerdo contigo en que la solucion debería ser usando solo número, sin recurrir a la transformacion hacia String; lógicamente eso implica más trabajo, es verdad,:o pero si se trata de que nuestro amigo luisito2011 aprenda, pues hay que ponerse a trabajar en buscar una solucion usando solo numero. Claro ésta que ecfisa solo quizo ayudar y su solucion es totalmente válida si se trata de solucionar problemas de programacion de cualquier forma, pero si por el contrario es para aprender supongo que el profesor debería restringir la conversion a String y solo permitir una solucion basada en operaciones matemáticas numerales, tal como lo hacía mi catedrático cuando estaba dando mis primeros pininos en programación :D....,la verdad que no me gustaba por que desde mi punto de vista tal restrincion me complicaba la vida, en aquel entonces, pero pude lidiar con una solucion correcta tal como lo quería el catedrático..;):D y eso me ayudó mucho a desarrolar mi lógica, aunque todavía sigue en proceso :D :D.
Saludos...

gatosoft 31-03-2011 19:03:07

Solo a manera de dato curioso:

Numero de digitos = Logaritmo (numero) +1;

Un saludo,

roman 31-03-2011 19:14:25

Cita:

Empezado por Delphius (Mensaje 395221)
Por cierto... eso de convertir a string para luego pasarlo a integer me parece más un intento de cañonazo. Se que este artilugio puede resultar fácil, y reducir líneas... pero si en es que luisito está recién comenzando en programación en alguna universidad o instituto me parece que el objetivo del profe no es que vaya a por esos artilugios sino que exprima su capocha hasta encontrar un algoritmo que no recurra a esas técnicas sino que lo haga de forma directa (que se puede). :rolleyes: ;)

Cita:

Empezado por rgstuamigo (Mensaje 395244)
Me parece que se trata de la primera Opcion...Delphius...:) y estoy totalmente de acuerdo contigo en que la solucion debería ser usando solo número, sin recurrir a la transformacion hacia String; lógicamente eso implica más trabajo, es verdad,:o pero si se trata de que nuestro amigo luisito2011 aprenda, pues hay que ponerse a trabajar en buscar una solucion usando solo numero.

Totalmente en desacuerdo :D

Para mi es claro que se trata de un ejercicio de manipulación de caracteres y no de aritmética.

Si se busca una solución usando operaciones aritméticas realmente no se estaría aprendiendo programación sino eso, aritmética.

// Saludos

Delphius 31-03-2011 20:45:41

Cita:

Empezado por roman (Mensaje 395267)
Totalmente en desacuerdo :D

Para mi es claro que se trata de un ejercicio de manipulación de caracteres y no de aritmética.

Si se busca una solución usando operaciones aritméticas realmente no se estaría aprendiendo programación sino eso, aritmética.

// Saludos

Ufa, y yo que pensé que te tendría como aliado en ésta. :D
Vaya... entonces ya me lo voy confirmando... sería un profesor bien HDP porque si yo fuera el profe de luisito los obligaría a pensar y no estar pensando en un artilugio de manipulación de caracteres.

Tu dices que se estaría aprendiendo aritmética, pues yo digo que el esfuerzo por pensar en el algoritmo también cuenta (y muchísimo diría yo) y no se trata simplemente de que saquen a repasar aritmética de primaria. Parte del ser un desarrollador es desarrollar el sentido de la lógica, y me parece que apoyarse en problemas de índole matemática es una excelente herramientas para abrirles la cabezota y ayudarles a sacar ingenio, y el poder de abstracción.

Si... ya me digo: sería un buen profe HDP, ¡pobrecitos! :p :D :o

Saludos,

roman 31-03-2011 20:55:24

Estás confundiendo la magnesia con la gimnasia. ¿Quién te dice que para elaborar un algoritmo de manipulación de caracteres no necesitas pensar? Pensar no es malo. Lo malo está en pensar lo que no cuando no :D

Yo soy matemático (aunque no ejerzo como tal), y por ello, no rehuyo de un problema de esa índole. Pero si estoy aprendiendo a nadar no pienso en los tenis para correr.

El problema que plantea luisito, dudo que tenga ninguna aplicación práctica. Y, precisamente por ello me queda claro que es un ejercicio para que el alumno aprenda a manipular caracteres.

Otra cosa es que el ejercicio me parece bastante soso. Pero es harina de otro costal :)

// Saludos

rgstuamigo 31-03-2011 21:10:23

Cita:

Empezado por roman (Mensaje 395267)
Totalmente en desacuerdo :D

Para mi es claro que se trata de un ejercicio de manipulación de caracteres y no de aritmética.

Si se busca una solución usando operaciones aritméticas realmente no se estaría aprendiendo programación sino eso, aritmética.

Pues...creo que lo aclaré, en mi anterior post, todo depende de lo que el profesor quiera lograr..., pues "una cosa es hacer que el estudiante aprenda a utilizar funciones de un leguaje de programación y otra muy distinta es hacer que el estudiante piense, razone y busque la forma de desarrollar su creatividad para resolver sus problemas"; en mi caso aprendí muchos trucos cuando el profesor(catedrático) me restringió el uso de cadenas, e inclusive recuerdo que nos hizo implementar una clase "número natural" donde solo se hacía operaciones con números naturales y cosas similares a las de luisito2011, y pues vaya que me ha servido de mucho aprenderlas.;)
Ten en cuenta que en la programacion no solo se utiliza el conocimiento del lenguaje que se está usando, sino más bien hay que aprender a desarrollar la lógica.;)
Saludos...:)

Delphius 31-03-2011 21:15:03

Cita:

Empezado por roman (Mensaje 395300)
Estás confundiendo la magnesia con la gimnasia. ¿Quién te dice que para elaborar un algoritmo de manipulación de caracteres no necesitas pensar? Pensar no es malo. Lo malo está en pensar lo que no cuando no :D

Yo soy matemático (aunque no ejerzo como tal), y por ello, no rehuyo de un problema de esa índole. Pero si estoy aprendiendo a nadar no pienso en los tenis para correr.

El problema que plantea luisito, dudo que tenga ninguna aplicación práctica. Y, precisamente por ello me queda claro que es un ejercicio para que el alumno aprenda a manipular caracteres.

Otra cosa es que el ejercicio me parece bastante soso. Pero es harina de otro costal :)

// Saludos

Pos que quieres que te diga... si me das un problemas de números te pienso en números. Si me das un problema basado en caracteres, te pienso en caracteres. Así pienso yo. Si el tema de clases, en el momento, fuera sobre tratamiento de strings en lo menos que quisiera que pensaran los chicos es que operen números como strings y este ejercicio estaría totalmente descartado.

Viendo el código de luisito, y su planteo no me suena descabellado pensar en una solución puramente aritmética.

Y precisamente sabiendo que eres matemático (nos los dijiste hace un buen tiempo... cuando se presentó un problema sobre el cálculo de un promedio ;) ) te imaginé ofreciendo un aporte numérico.

Como decía rgstuamigo, si fuera un problema de programación a resolver como venga y salga pues bienvenida sea la propuesta, pero si es de alguna cátedra viendo el código inicialmente expuesto me parece totalmente fuera de gusto que primero venga una propuesta numérica y en el medio semejante manejo de strings para salir de paso.

Yo lo veo desde el punto de vista de un profesor, si... como de los tipo bien HDP :D Si un alumno me muestra eso le rebajo la nota.

Saludos,

roman 31-03-2011 21:28:41

Cita:

Empezado por Delphius (Mensaje 395303)
Pos que quieres que te diga... si me das un problemas de números te pienso en números. Si me das un problema basado en caracteres, te pienso en caracteres.

Quizá aquí está el problema. Ves un problema de números y de inmediato asumes que es un problema aritmético (y no veo porqué un profesor de programación deba poner problemas aritméticos).

El problema podría estar perfectamente planteado así:

Cita:

Dada una secuencia de caracteres, quite el n-ésimo
y la esencia es la misma.

Cita:

Empezado por Delphius (Mensaje 395303)
Y precisamente sabiendo que eres matemático (nos los dijiste hace un buen tiempo... cuando se presentó un problema sobre el cálculo de un promedio ;) ) te imaginé ofreciendo un aporte numérico.

Lo haría si la naturaleza del problema fuera numérica. Me parece que no lo es.

Cita:

Empezado por Delphius (Mensaje 395303)
pero si es de alguna cátedra viendo el código inicialmente expuesto me parece totalmente fuera de gusto que primero venga una propuesta numérica y en el medio semejante manejo de strings para salir de paso.

No se está saliendo del paso. Se estaría resolviendo como se espera, con una manipulación de cadenas.

Cita:

Empezado por Delphius (Mensaje 395303)
Yo lo veo desde el punto de vista de un profesor, si... como de los tipo bien HDP :D Si un alumno me muestra eso le rebajo la nota.

De hecho, es así como yo lo veo, desde el punto de vista de un profesor. Y a ti no te rebajaría la nota porque no soy HDP :D pero sí te explicaría en qué consiste el ejercicio y qué se pretende obtener de él.

// Saludos

ecfisa 31-03-2011 22:47:50

Hola.

Recién retomo el hilo, y bueno... No hay mucho que agregar a lo dicho por román, veo que tuvimos la misma interpretación sobre la naturaleza no numérica del problema.

Cita:

Como decía rgstuamigo, si fuera un problema de programación a resolver como venga
Pensé que de eso se trataba: de un problema de programación a resolver.

También disiento con alusiones como: 'como venga' y 'saliendo del paso', eso le suena a chapuzero a qualquier lector, creo que la función es simple y flexible. Sirve tanto para tratar números cardinales y ordinales como para un código numérico arbitrario. Y agregando un simple parámetro es fácil eliminar más de un dígito.

Además, que exista un método aritmético de hacerlo, no quiere decir que todos los demás métodos sean 'atajos' para evitarlo (convengamos que no es matemática de alto vuelo...), ni quiere decir que sea la mejor opción a aplicar.

Por otro lado y no menos importante, luisito no especificó en ningún momento que debiera resolverse por métodos arítmeticos. Por lo que la metodología a aplicar, siempre que resuelva el problema, es totalmente subjetiva.

Si el profesor tuvo esa o aquella intención... solo él o luisito sabrán... :)

Un saludo.

luisito2011 01-04-2011 00:56:53

hola.. a todoj.. gracias por los comentarios..y cosejos
en realidad yo aun estoy aprendiendo..
y la 1ra respuesta del problema que tenia .. si estaba bien..
pero lo que yo buscaba era esto.. que lo resolvi con un conpañero
gracias te todos modos..
---------------------------------------------------------------
Código Delphi [-]
unit caja1;
interface
function eliminar_dig(a,z:integer):integer;
implementation
 function eliminar_dig(a,z:integer):integer;
 var b,c,d,inv,e,f:integer;
 begin
 write('digite numero');
readln(a);
write('digite la posicion a eliminar');
readln(z);
 inv:=0; d:=0; c:=0;  f:=0;
 while a>0 do
 begin
   b:=a mod 10;
   a:= a div 10;
   inv:=inv*10+b;
 end;
   while inv>0 do
   begin
   d:=inv mod 10;
   inv:=inv div 10 ;
   c:=c+1;
   if c<>z then
    begin
      f:= f*10+d
    end;
    eliminar_dig:=f;
 end;
 end;
---aun que la respuesta.. me ayudo a recordar.. del invertir.. los digitos.
---y la ayuda que te dan en este foro es muy bueno.. se les agradece a todos...
saludos

roman 01-04-2011 01:03:42

Ja, ja. Ahora sí le va a dar gusto a Delphius :)

// Saludos

Delphius 01-04-2011 03:50:08

Pues claro que me da gusto, porque al final resulta ser que mi intuición era asertada: te dan manzanas, piensa en manzanas... por más que quieran llevarme la contraria :D

Lo dijo luisito:

Cita:

y la 1ra respuesta del problema que tenia .. si estaba bien..
pero lo que yo buscaba era esto..
No dijo desde un principio que deba pensarse en un enfoque en cadenas, pero la forma en como ya estaba encarando el problema anunciaba en como analizarlo (y les sonará muy molesto pero se los digo: no supieron leerlo). Disculpen si es que suena pesado pero es que es lo que suena lógico y de esperarse: si ten dan manzanas, piensa en manzanas... no en naranjas. ;)

Un profesor, en los que se están iniciando prima la estrujada de neuronas antes cualquier tipo de innovación. Las innovaciones vienen para más adelante, para cuando las neuronas se han preparado y asimilado los conceptos.... así las ideas pueden brillar y salir mucho mejor canalizadas que sin una preparación previa.

¿Cómo se puede innovar si el estudiante apenas entiende de algunas cosas?
Parece que están olvidando de lo que es ser un estudiante.

Saludos,

gatosoft 01-04-2011 05:26:19

jajajajjaa :D jajajajjaja

casi tienen que pasar este hilo a debates y "luisito", ni se enteró ....

interesante y sana discusión. (espero que sin rencores) :D

roman 01-04-2011 06:27:17

Cita:

Empezado por Delphius (Mensaje 395356)
Pues claro que me da gusto, porque al final resulta ser que mi intuición era asertada: te dan manzanas, piensa en manzanas... por más que quieran llevarme la contraria :D

No es que te quiera llevar la contraria. Para mi el ejercicio sigue siendo de manipulación de caracteres. Si el profesor busca una solución numèrica, entonces es un ejercicio que poco sirve para aprender a programar.

Y no es que no sepamos leer, es que no puede uno ser tan cuadrado como para pensar que por el sólo hecho de haber números involucrados entonces se trata de un problema aritmético.

// Saludos


La franja horaria es GMT +2. Ahora son las 01:53:28.

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