Autor
|
Tema: Algoritmo de numeros compuestos (Leído 10,697 veces)
|
Dumy
Desconectado
Mensajes: 25
|
Hola de nyevo: Estoy intentando codificar en C este algoritmo: 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
Mensajes: 1.603
|
Prácticamente es traducir ese pseudocódigo a C. No debes inventarte nada raro.
|
|
|
En línea
|
|
|
|
profinet
Desconectado
Mensajes: 31
|
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. #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.
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
[Batch] Algoritmo de Numeros Primos
Scripting
|
SmartGenius
|
1
|
6,373
|
30 Diciembre 2008, 00:06 am
por SmartGenius
|
|
|
Algoritmo numeros primos [Batch]
Scripting
|
leogtz
|
4
|
12,718
|
15 Junio 2009, 20:44 pm
por SmartGenius
|
|
|
Sencillo Algoritmo de Números Pseudoaleatorios [Aporte]
.NET (C#, VB.NET, ASP)
|
Keyen Night
|
0
|
2,715
|
17 Septiembre 2011, 21:31 pm
por Keyen Night
|
|
|
Duda algoritmo basado en numeros irracionales
Criptografía
|
Stakewinner00
|
3
|
4,153
|
2 Septiembre 2013, 08:57 am
por El Benjo
|
|
|
Algoritmo: Suma N numeros pares implementando ciclo while
Programación C/C++
|
LauraD
|
6
|
24,977
|
12 Abril 2014, 16:07 pm
por leosansan
|
|