Mostrando entradas con la etiqueta múltiplo. Mostrar todas las entradas
Mostrando entradas con la etiqueta múltiplo. Mostrar todas las entradas

jueves, 17 de diciembre de 2020

Subconjunto ordenado de array

El siguiente ejemplo pide ingresar una lista de números positivos y guardarlos en un array, para luego leerlos y copiar a otro array de forma ordenada sólo aquellos que son múltiplos de 5.

Un ejemplo de ejecución:



¿Qué cambiarías en el programa para que extraiga los múltiplos de otro número?

¿Qué cambiarías para que el orden sea ascendente?

¿Qué otras variaciones añadirías al programa?


#include <iostream>

int main(int argc, char** argv) {

int fin = 0;

int numero;

int listaNumeros[20];

int totalNumeros = 0;

int listaOrdenada[20];

int totalOrdenada = 0;

//lectura por teclado de un conjunto de números positivos, como máximo 20 números

while(!fin && totalNumeros<20){

printf("ingrese un numero:");

scanf("%d", &numero);

if(numero > 0) {

listaNumeros[totalNumeros] = numero;

totalNumeros++;

}else{

fin++;

}

}

//imprimir la lista

for(int i = 0; i<totalNumeros; i++) printf("%d ", listaNumeros[i]);

//seleccionar los múltiplos de 5 ordenados descendente

for(int i = 0; i<totalNumeros; i++){

if( (listaNumeros[i]%5) == 0 ){

int encuentra = 0;

int indice; //indice que recorre la lista ordenada para encontrar la posición donde insertar

int multiploInsertar = listaNumeros[i];//número a insertar en la lista ordenada

indice = totalOrdenada - 1;

//recorremos la lista ordenada de forma descendente y vamos desplazando hasta qu encontramos la posición correcta

while(!encuentra && indice >= 0){

//comparo el número a ubicar con el elemento en la ListaOrdenada en la posición índice

if(multiploInsertar > listaOrdenada[indice]){

//como es mayor muevo el valor de lista ordenada al siguiente índice

listaOrdenada[indice + 1 ] = listaOrdenada[indice];

}

else{

listaOrdenada[indice+1] = multiploInsertar;

totalOrdenada++;

encuentra = 1;

}

indice--;

}

if(!encuentra) {//en el caso que recorra todo el arrayOrdenado y sea mayor a todos, se coloca en el primer elemento

listaOrdenada[0] = multiploInsertar;

totalOrdenada++;

}


}

}

//imprimir la lista

printf("\nNumero de multiplos encontrados %d\n", totalOrdenada);

for(int i = 0; i<totalOrdenada; i++) printf("%d ", listaOrdenada[i]);

return 0;

}

domingo, 25 de octubre de 2015

Operación Residuo (MOD)

El set de instrucciones de cada lenguaje de programación puede llegar a ser tan amplio que no llegamos a aprenderlo todo y mucho menos saber en qué casos podemos sacar ventaja de utilizar una instrucción determinada.
En este post quiero hablar de la instrucción de Residuo, conocida como % en C, C++, php, java o MOD en COBOL, PLSQL, Pascal.

Recordando un poco de matemáticas, sabemos que:
Dividendo = Cociente * Divisor + Residuo
Ejm. 7 = 3 * 2 + 1
Si despejamos el residuo sería:
Residuo = Dividendo - (Cociente * Divisor)

La operación Residuo se calcula utilizando el Dividendo y el cociente o el dividendo y el divisor. La sintaxis sería:
Residuo = Dividendo % Cociente (1 = 7 % 3)
Residuo = Dividendo % Divisor (1 = 7 % 2)

¿En qué casos podemos utilizar esta operación?
Sólo os daré dos casos típicos:

Realizar una acción cuando un número es múltiplo de otro
Imprimir los 30 primeros múltiplos de 3
int numerosImpresos = 0 //controla el número de números impresos
int contador = 1; //Es el número que hace de Dividendo en la operación
while(numerosImpresos < 30)
{
  if (contador % 3 == 0) //si el residuo es 0, es una división exacta por tanto es múltiplo
  {
    Console.write(contador);  
  }
  contador ++;
}

Realizar un cambio de base
Cambiar el número 5 de base decimal a binario.
Como se cambia a sistema binario de utiliza el divisor = 2 (Base N, implica divisor N)

int dividendo = 5;
int divisor = 2;
string cambioBase = “”;

while(dividendo / divisor >1)
{
  residuo = dividendo % divisor;
  dividendo = dividendo / divisor;
  cambioBase = residuo + cambioBase; //se va concatenando a la izquierda
}
cambioBase = dividendo + cambioBase; //en esta variable está el resultado "101"



¿Se os ocurre otro ejemplo?