elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Usando Git para manipular el directorio de trabajo, el índice y commits (segunda parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Algoritmo de numeros compuestos
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Algoritmo de numeros compuestos  (Leído 7,029 veces)
Dumy

Desconectado Desconectado

Mensajes: 17


Ver Perfil
Algoritmo de numeros compuestos
« en: 14 Noviembre 2023, 23:31 pm »

Hola de nyevo:

Estoy intentando codificar en C este algoritmo:


      
Código:
algoritmo  BuscaDivisoresMultiplicadosIgualesNumero
            var
                        num, divisor1, divisor2, divisor3: entero;
            fvar


            num := leerEntero( );

            mientras  (num ≠ -1) hacer    
                        buscadivisor1(num, divisor1, divisor2,divisor3);  

                        si loEs(num, divisor1, divisor2,divisor3)  entonces
                                          printaExito(num, divisor1, divisor2,divisor3

                        sino
                                          printaFracaso(num);

                         fsi  


                         num := leerEntero( );

            fmientras


       falgoritmo
 

      accion printaExito( ent a: entero, ent b: entero, ent c: entero, ent d: entero )


                  escribirCadena(‘El número: ‘);
                  escribirEntero(a);

                  escribirCadena(‘ es igual a  ‘);

                  escribirEntero(b);

                  escribirCadena(‘ multiplicado por  ‘);

                  escribirEntero(c);  

                  escribirCadena(‘ y por ‘);

                  escribirEntero(d);  

            fsi        

      faccion


      accion printaFracaso(ent a: entero)
            escribirCadena(‘El número: ‘);
            escribirEntero(a);
            escribirCadena(‘ no tiene divisores diferentes de 1 que multiplicados sean igual a el. ‘);
      faccion


      funcion loEs(ent x: entero,ent y:entero,ent z: entero, ent w: entero): booleano;

                        retorna x = (y * z * w);            
      ffuncion


      accion buscadivisor1(ent n: entero, sal d1: entero, sal d2: entero, sal d3: entero )
            var

                   encontrado: booleano;
            fvar

            encontrado:=falso;

            d1:=2;

            d2:=2;

            d3:=2;

            mientras  d1<=(n div 2) y no encontrado  hacer
                  buscadivisor2 (n,d1,d2,d3);
                  encontrado:= loEs (n,d1,d2,d3);

                   si   no encontrado  entonces

                           d1:=d1+1;

                   fsi  
            fmientras
      faccion
 

      accion buscadivisor2( ent num: entero, ent d1: entero, sal d2: entero, sal d3: entero  )

            var

                   encontrado: booleano;
            fvar

            encontrado:=falso;

            d2:=2;

            d3:=2;

            mientras  d2 <= (num div 2) y no encontrado  hacer
                  buscadivisor3(num,d1,d2,d3);  

                 encontrado:= loEs (num,d1,d2,d3);
                  si no encontrado  entonces
                        d2:=d2+1;
                  fsi      
            fmientras
      faccion

 

      accion buscadivisor3( ent num: entero, ent d1: entero, sal d2: entero, sal d3: entero  )

            var

                   encontrado: booleano;
            fvar

            encontrado:=falso;

            d3:=2;

            mientras  d3 <= (num div 2) y no encontrado  hacer

                 encontrado:= loEs (num,d1,d2,d3);
                  si no encontrado  entonces
                        d3:=d3+1;
                  fsi      
            fmientras
      faccion

Tengo la teoria de que en la prkmera oarte hay que yacer un bucle while que busque divisores, lo de printar  las cadenas  eso lo tengo solucionado, pero lo qye desconozco es como codificar el resto, el resultado, deberia dar un programa el cual te muestra 3 numeros que multiplicados entre si dan el numero introducido

¿Alguien puede ayudarme a codificar el algoritmo?


« Última modificación: 16 Noviembre 2023, 08:11 am por fary » En línea

MAFUS


Desconectado Desconectado

Mensajes: 1.603



Ver Perfil
Re: Algoritmo de numeros compuestos
« Respuesta #1 en: 15 Noviembre 2023, 20:31 pm »

Prácticamente es traducir ese pseudocódigo a C. No debes inventarte nada raro.


En línea

profinet

Desconectado Desconectado

Mensajes: 30



Ver Perfil
Re: Algoritmo de numeros compuestos
« Respuesta #2 en: 21 Noviembre 2023, 20:57 pm »

Este programa solicita al usuario ingresar un número a través del teclado. Después se emplea un puntero hacia un array de divisores que se va llenando mediante la función findDivisors(). Posteriormente, en la función findProduct(), se realizan permutaciones de los divisores, buscando la combinación que cumple con la condición específica del producto.

Al concluir, el programa proporciona la terna de divisores que satisface el requisito, o en su defecto, emite un mensaje de error si no se encuentra tal combinación.

Código:
#include <stdio.h>
#include <stdlib.h>

int* findDivisors(int number, int* divisorCount) {
    int* divisors = NULL;
    *divisorCount = 0;

    // Store divisors in a dynamic array
    for (int i = 2; i <= number / 2; i++) {
        if (number % i == 0) {
            (*divisorCount)++;

            // Add the divisor to the dynamic array
            divisors = realloc(divisors, (*divisorCount) * sizeof(int));
            divisors[*divisorCount - 1] = i;
        }
    }

    return divisors;
}

int findProduct(int* divisors, int divisorCount, int* productIndices) {
    for (int i = 0; i < divisorCount - 2; i++) {
        for (int j = i + 1; j < divisorCount - 1; j++) {
            for (int k = j + 1; k < divisorCount; k++) {
                int product = divisors[i] * divisors[j] * divisors[k];
                if (product == divisors[i] || product == divisors[j] || product == divisors[k]) {
                    // Store indices of divisors forming the product
                    productIndices[0] = i;
                    productIndices[1] = j;
                    productIndices[2] = k;
                    return product;
                }
            }
        }
    }
    return -1; // Indicates no such product was found
}

int main() {
    int number, divisorCount;
    int* divisors;

    printf("Introduce un numero: ");
    scanf("%d", &number);

    divisors = findDivisors(number, &divisorCount);

    if (divisorCount > 0) {
        printf("Divisores de %d: ", number);
        for (int i = 0; i < divisorCount; i++) {
            printf("%d ", divisors[i]);
        }
        printf("\n");

        int productIndices[3];
        int product = findProduct(divisors, divisorCount, productIndices);

        if (product != -1) {
            printf("El producto de los divisores %d, %d, y %d es igual a %d.\n",
                   divisors[productIndices[0]], divisors[productIndices[1]], divisors[productIndices[2]], product);
        } else {
            printf("No hay algun producto de los divisores igual a uno de los divisores.\n");
        }
    } else {
        printf("El numero %d no tiene divisores mayores que 1.\n", number);
    }

    // Free the memory of the dynamic array
    free(divisors);

    return 0;
}
« Última modificación: 21 Noviembre 2023, 21:03 pm por profinet » En línea

Don't shy away from the terminal; embrace it! In the GNU world, everything is a file.
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
[Batch] Algoritmo de Numeros Primos
Scripting
SmartGenius 1 6,049 Último mensaje 30 Diciembre 2008, 00:06 am
por SmartGenius
Algoritmo numeros primos [Batch]
Scripting
leogtz 4 12,145 Último mensaje 15 Junio 2009, 20:44 pm
por SmartGenius
Sencillo Algoritmo de Números Pseudoaleatorios [Aporte]
.NET (C#, VB.NET, ASP)
Keyen Night 0 2,533 Último mensaje 17 Septiembre 2011, 21:31 pm
por Keyen Night
Duda algoritmo basado en numeros irracionales
Criptografía
Stakewinner00 3 3,843 Último mensaje 2 Septiembre 2013, 08:57 am
por El Benjo
Algoritmo: Suma N numeros pares implementando ciclo while
Programación C/C++
LauraD 6 24,383 Último mensaje 12 Abril 2014, 16:07 pm
por leosansan
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines