Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   programar deteccion de ultimos digitos pares en vectores (https://www.clubdelphi.com/foros/showthread.php?t=93492)

einer 17-10-2018 06:01:01

programar deteccion de ultimos digitos pares en vectores
 
muy buenas vengo a pedir ayuda con mi proyecto
les explipco...
mi proyecto trata de identificar los numeros que tengan los pirmeros digitos pares como por ejemplo 243 el 2 y el 4 son los primeros digitos y son pares asi que un contador suma cuantos numeros introducidos tienen esa caracteristica (de los primeros 2 pares) no eh logrado concretarlo mas alla de que detecto por separado los numeros pares de cada numero introducido (por ejemplo si coloco 234 y 647 me sale como resultado *3* por el 2 y luego el 6 y el 4....) pero la idea es que salga 1 por que solo 1 de los 2 digitos lleva los primeros pares...

ayudenme por favor dejare adjunto lo que hice hasta ahora
psdt: es la parte final arriba hay sobre vectores

Código Delphi [-]

//////////////////// en este procedimiento es mi problema///////////////////////////////////


procedure TForm1.Button7Click(Sender: TObject);
var
nro,contador,i,a:integer;
nrox,contadorx,ix,ax:integer;
contadorfinal:integer;
begin

  i:=1;
  contador:=0;
  ix:=1;
  contadorx:=0;
    while i<=N do
      begin
        nro:=v[i];
        while nro>9 do////////////////////
          begin
            nro:=nro div 10;
           end;
          if (nro mod 2)=0 then
          contador:= contador+1;
          i:=i+1;

        end;                          //hasta aqui se detecta  el 1°
   /////////////////////////////////////////////////////////////////////////////

   //desde aqui se detecta el 2° par


   while ix<=N do
      begin
        nrox:=v[i];
        while nrox>99 do////////////////////
          begin
            nrox:=nrox div 10;
           end;
          if (nrox mod 20)<=10 then
          contadorx:= contadorx+1;
          ix:=ix+1;
          contadorfinal:=contador+contadorx;

          contadorfinal:=contadorfinal+1;
        end;

   label4.Caption:=inttostr(contadorfinal);
end;
end.

ElKurgan 17-10-2018 08:09:49

Hola, Einer...

Si no te he entendido mal, para un array con estos valores "234, 243, 675, 667, 444" te debería devolver 3, ¿no? (sólo comienzan con dos pares el 243, el 667 y el 444).

Tal como lo planteas, la primera pasada me daría 5 puesto que todos empiezan por un par... Y luego lo sumas a contador final, con lo que el resultado final me da... ¡¡¡ 11 !!!

Creo que debería ser así:

Código Delphi [-]
var
  nrox, ix: integer;
  contadorfinal: integer;
  numero1, numero2: integer;
begin
  contadorfinal := 0;

  while ix <= N do
  begin
    nrox := v[ix];
    // Número tiene que ser mayor o igual a 10 para que sean pares
    if nrox >= 10 then
    begin
      while nrox > 99 do////////////////////
      begin
        nrox := nrox div 10;
      end;
      numero1 := nrox div 10;
      numero2 := nrox - (numero1 * 10);
      if (not odd(numero1)) and (not odd(numero2)) then
        contadorfinal := contadorfinal + 1;
      end;
    ix := ix + 1;
  end;

  label4.Caption:=inttostr(contadorfinal);

Espero haberte entendido bien

Un saludo

Neftali [Germán.Estévez] 17-10-2018 10:07:13

Por favor einer, utiliza TAG's cuendo añadas código a los mensajes.

einer 17-10-2018 14:18:42

hola gracias por tu respuesta..
intente con lo que me dices pero no sale el resultado que deberia... tomando el ejemplo que tu pones "234, 243, 675, 667, 444" el resultado deberia ser 3 por que solo 3 digitos llevan los 2 ultimos pares el 243 667 y 444

ecfisa 17-10-2018 22:33:20

Hola.

Un modo es:
Código Delphi [-]
function FirstTwoPairs(Number: Integer): Boolean;
var
  Invert, Rest: Integer;
begin
  Invert := 0;
  while Number > 0 do
  begin
    Rest   := Number mod 10;
    Invert := Invert * 10 + Rest;
    Number := Number div 10;
  end;
  Result := ((Invert mod 10 mod 2)=0) and ((Invert mod 100 div 10 mod 2)=0);
end;

Otro:
Código Delphi [-]
function FirstTwoPairs(const Number: Integer): Boolean;
var
  s: string;
  a,b: Integer;
begin
  a := StrToInt(IntToStr(Number)[1]);
  b := StrToInt(IntToStr(Number)[2]);
  Result := (a mod 2 = 0) and (b mod 2 = 0);
end;

Ej. de uso:
Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
const
 v  : array[1..5] of Integer = (234, 243, 675, 667, 444);
var
  i : Integer;
begin
  Memo1.Clear;
  for i := Low(V) to High(V) do
    if FirstTwoPairs(v[i]) then
     Memo1.Lines.Add(IntToStr(v[i]));
end;

Saludos :)

ElKurgan 18-10-2018 07:12:50

El que te envíe me funciona sin problemas, asi que te debería funcionar también.

Pero, como siempre, el código de ecfisa es mucho más claro y eficiente... :D

Saludos

ecfisa 18-10-2018 16:47:35

Jajaja eso sí que es exagerado ! :D

Saludos :)


La franja horaria es GMT +2. Ahora son las 09:33:19.

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