Software
Menú
Gamersmafia es ahora un archivo de solo lectura.

El que me lo solucione le doi todos mis GM's

Bueno es un problema de programacion dev c++ y me gustaria que me ayudarais, no es que no lo haya intentando ni que no lo haga por flojera pero weno yo doi la pasta y ustedes no haceis las preguntas .
El problema es :

Un número entero se dice escalera si:
· tiene al menos 3 cifras
· todas las cifras son de la misma paridad (todas pares o todas impares)
· todas sus cifras mantienen un orden ascendente o descendente
· todas sus cifras son consecutivas (pares consecutivos o impares consecutivos), teniendo en
cuenta que el siguiente del 9 es el 1; del 8 es el 0; el anterior al 0 es el 8; y el anterior al 1 es
el 9.
Ejemplos de números escalera: 5791 208 319
Ejemplos de números NO escalera: 24 159 1357531
Realiza un programa que, introduciendo un número entero y de máximo 10 cifras por teclado,
indique si se trata de un número escalera o no.
 

 

Haber , para especificar, solo usando condiciones, buces,funciones y vectores, no mas adelante.
Tambien usando solo las bibliotecas stdio.h y stdlib.h , ninguna otra mas.
Bueno gracias y cualquier cosa que olvide lo ire poniendo.

Recompensa: 900
Mejor respuesta

Hola,

#6 ya ya, ya sé lo que tu quieres

Te digo cómo hacerlas, pero es tu curro implementarlas.
Paridad:

Un número es par si –> resto(NUM/2)=0

Para dividir el número en sus cifras, hay dos métodos.

Método 1.

cifra1= NUM- ((Parte entera NUM/10 *10))
cifraN= NUM-(((parte entera NUM/10 elevado a N) *10 elevado a N) +cifraN-1 )/10elevado a cifraN-1

Ejemplo, imagina el número 2347.
Le hacemos:
cifra1= 2347 - (23410) = 7
cifra2= 2347 - ((23
100) + 7) /10 = 4

Esto significa que puedes usar una función en recursiva para sacar todos los valores,.

Método 2.

Transformas el número en un array de caracteres.

tratas cada elemento convirtiéndolo en entero.

Así 2347 sería
NUM[0]= ‘2’
NUM[1]=’3’…

Una vez que tienes las cifras, simplemente hay que dividirlas para saber si son par o no.
Un pequeño flag para saber si todas son par o no y ya tienes tu función.

¿Quieres otra? Si no has entendido ésta no te merece la pena

Suerte.

por SinSa

El maximo de 10 cifras no es necesario controlarlo , pero el minimo 3 si.

Interesante
#2

Hola,

El programa es muy sencillo.

**pseudocódigo numero_escalera**

seguir=true

mientras seguir=true

NUM=leer_número()

si NUM/100< 1
escribir “ El número debe tener tres cifras al menos”

si NUM/100>= 1
verificar_escalera(NUM)

fin mientras
**pseudocódigo numero_escalera**

Ahora te pongo la función verificar_escalera, imagino que es la que te hace falta

Regards(las plantas)

Esto… yo te hago las prácticas de redes por 1500 gmf´s cada una…

Es sencillo, hombre, tampoco es como para pedir que te lo hagan (esto es consejo, cuando llegues a examen no vas a entender ni papa). Te lo haría pero ando sin tiempo para ponerme.

Interesante
#4

Hola,

**pseudocódigo verificar_escalera(int NUM) ***

Si misma_paridad(NUM)=TRUE /* <— verifica la paridad
—- Si orden (NUM) = TRUE /* <— verifica el orden asc o desc
——–Si consecutivas (NUM)=TRUE /* <— verifica cifras consecutivas
————escribir “el número SI es escalera”
——–sino
————escribir “el número NO es escalera”
—-sino
——–escribir “el número NO es escalera”
sino
—-escribir “el número NO es escalera”

**pseudocódigo verificar_escalera(int NUM) ***

Como ves, he descompuesto el problema en tres pequeñas funciones, cada una de las cuales verifica una parte de las condiciones y si se cumplen sigue con la siguiente.

Regards(las plantas)

Esto es de algúna carrera o algo? Porque no entiendo nada

grado superior administrador de sistemas informaticos, pero yo lo que quiero es la funcion de la paridad la ascendencia o descendencia y la de si es 9 sige en 0 ,etc , esas comprobaciones

Editado: Por cierto sinsa muy buena esa, solo me quedaria pasarlo a c++ , pero aun me siguen faltando las otra funciones las tengo pero me dan fallos por ejemplo la paridad , la de ascendente o descendente kreo ke sta bien

Interesante
#7

Hola,

Comentario #6 por tiko:
grado superior administrador de sistemas informaticos, pero yo lo que quiero es la funcion de la paridad la ascendencia o descendencia y la de si es 9 sige en 0 ,etc , esas comprobaciones

Editado: Por cierto sinsa muy buena esa, solo me quedaria pasarlo a c++ , pero aun me siguen faltando las otra funciones las tengo pero me dan fallos por ejemplo la paridad , la de ascendente o descendente kreo ke sta bien

ya ya, ya sé lo que tu quieres

Te digo cómo hacerlas, pero es tu curro implementarlas.
Paridad:

Un número es par si –> resto(NUM/2)=0

Para dividir el número en sus cifras, hay dos métodos.

Método 1.

cifra1= NUM- ((Parte entera NUM/10 *10))
cifraN= NUM-(((parte entera NUM/10 elevado a N) *10 elevado a N) +cifraN-1 )/10elevado a cifraN-1

Ejemplo, imagina el número 2347.
Le hacemos:
cifra1= 2347 - (23410) = 7
cifra2= 2347 - ((23
100) + 7) /10 = 4

Esto significa que puedes usar una función en recursiva para sacar todos los valores,.

Método 2.

Transformas el número en un array de caracteres.

tratas cada elemento convirtiéndolo en entero.

Así 2347 sería
NUM[0]= ‘2’
NUM[1]=’3’…

Una vez que tienes las cifras, simplemente hay que dividirlas para saber si son par o no.
Un pequeño flag para saber si todas son par o no y ya tienes tu función.

¿Quieres otra? Si no has entendido ésta no te merece la pena

Suerte.

Comentario #7 por SinSa:
Hola,

#6 ya ya, ya sé lo que tu quieres

Te digo cómo hacerlas, pero es tu curro implementarlas.
Paridad:

Un número es par si –> resto(NUM/2)=0

Para dividir el número en sus cifras, hay dos métodos.

Método 1.

cifra1= NUM- ((Parte entera NUM/10 *10))
cifraN= NUM-(((parte entera NUM/10 elevado a N) *10 elevado a N) +cifraN-1 )/10elevado a cifraN-1

Ejemplo, imagina el número 2347.
Le hacemos:
cifra1= 2347 - (23410) = 7
cifra2= 2347 - ((23
100) + 7) /10 = 4

Esto significa que puedes usar una función en recursiva para sacar todos los valores,.

Método 2.

Transformas el número en un array de caracteres.

tratas cada elemento convirtiéndolo en entero.

Así 2347 sería
NUM[0]= ‘2’
NUM[1]=’3’…

Una vez que tienes las cifras, simplemente hay que dividirlas para saber si son par o no.
Un pequeño flag para saber si todas son par o no y ya tienes tu función.

¿Quieres otra? Si no has entendido ésta no te merece la pena

Suerte.

xxDD joder k buena pero da la casualidad k la de separar cifras y hallar par es lo k tenia hecho , separar cifras es sencillisimo y lo de ver si es par o no tambien , pero como digo si todos los wekos de los vectores son pares , es decir ago un bucle para recorrer el vector y ahora compruebo si el elemento i del vector ( i=0 , i++) es par. Una vez visto si todas las cifras son pares tengo k mirar si es ascendente o descendente , y luego la jodida comprobacion de kuando es 0 , o 9 que salta al 1 o al 8.

Editado: A bueno tengo una duda, quiero saber si tengo que hacer la cmprobacion de par o impar en dos funciones separadas y si tengo que devolver algun valor al main

Informativo
#9

Hola,

pero como digo si todos los wekos de los vectores son pares ,

Con un flag.

miras el primer número.
Si es par =>flag=PAR sino =>flag=IMPAR
miras el siguiente.
lo comparas con el flag. Si coincide sigues, si no coincide paras (ya no es escalera).

Para verificar las otras dos condiciones, el truco es comparar con la fila hecha.
Hay varias formas de hacerlo.

La más eficaz es con filas circulares doblemente enlazadas, pero si no sabes manipular esas estructuras con punteros es mejor que ni lo pienses.

Una forma fácil es la siguiente.

creas una función que dados dos números te indique cuál es el tercero.

por ejemplo, si n1=2 y n2=4 te devolverá n3=6.
si n1=5 y n2=3 te devolverá n3=1.

es bastante sencillo. La función hace:

Si n1<n2 n3=n2+2 (menos el caso n1=0 n2=8 ó n1=1 y n2=9 que serían el siguiente caso)
si n1>n2 n3=n2-2

ahora controlamos el salto del 0 y el 1:

si n3<0 n3=n3+10
si n3>10 n3=n3-10

y ya tienes la función que te devuelve el número siguiente a dos consecutivos.
Ahora coges tu array de cifras y haces un bucle:

mientras tenga cifras
si cifra3= dame_cifra(cifra1,cifra2)
siguiente cifra

Regards(las plantas)

mmmm ya kreo k estoi listo casi todfo el programa , bueno te voi a dar las gracias por adelantado porke se ve k sabes d k hablas y m has ayudado
Por cierto , punteros nooo xxD mejor no no m hables de eso que se me peta el pc de pensarlo xxD

Mira esto hice yo para calcular el salto del 9 y del 0 :

int GetNextNumber(int Number)
{
Number += 2;
if(Number > 9)
Number -= 10;

return Number; }

int GetPreNumber(int Number)
{
// Just that missing
Number -= 2;
if(Number == 0)
Number += 8;

return Number; }

haber si m puedes ayudar que me empiezo a saturar ya de tantas lineas de comandos

Hola,

Pero el siguiente número dependerá de los dos anteriores, no de el anterior.
¿Cómo sabes si hay que invocar a next o a prev?

la función Pre no funciona para Number=1 (devuelve -1)

Regards(las plantas)

ok ya esta hecho , si quieres te lo envio para que lo veas que tal o algo, creo que funciona bien , alomejor tiene algun fallo pero creo que no es nada importante , perfecto no creo k lo haga nunca

Hola,

Estupendo.
Ponlo si quieres y le echo un ojo, pero ya sabes que si te toca el ojo malo poco puedo hacer

Regards(las plantas)

jajajaja weno weno tu me dices, lo e intentando hacer lo mejor posible y lo mas entendible posible en cuanto a variables, nose prueba haber, por cierto las gm’s son tuyas por la gran explicacion que mas dao, el programa que lo has hecho todo lo que has podido en pseudocodigo y porque todo ma servio de gran ayuda, aunque no me hayais dado nadie le programa hecho en c++ que era lo que yo en realidad queria . Bueno gracias a todos y ahi va el programa, tiene un pequeño fallo , pero nose si lo vereis :

#include <stdio.h>
#include <stdlib.h>

#define N 10
#define NoDireccion 0
#define ArrDireccion 1
#define AbaDireccion 2


void ControlarPar(int V[N]);
void ControlarImpar(int V[N]);
void ObtenerVector(int V[N],int num);
void ImprimirVector(int V[N]);
int ObtenerSigNumero(int Number);
int EsAscODesc(int V[N]);
int ObtenerAntNumero(int Number);

int main (void)
{
    int V[N];
    int num,i;
    printf("Introduce numero: ");
    scanf("%d",&num);
    if(num < 100)
       puts("ERROR NUMERO");
    else{
         putchar(10);
         ObtenerVector(V , num);
         putchar(10);
         ControlarPar(V);
         ControlarImpar(V);
         putchar(10);
    }
putchar(10);
system("PAUSE");
return 0;
}


void ImprimirVector(int V[N])
{
     for(int i = 0 ; i < N ; i++)
        printf("vector %d\t",V[ i ]);
}


void ObtenerVector(int V[N],int Numero)
{
    int Auxiliar,Divisor = 1;
    Numero *= 10;
    Auxiliar = Numero;

    for(int i = 0 ; i < N ; i++)
       V[ i ] = (-1);  //v[ i ]=(0) para rellenar el resto de ceros.

    while(Auxiliar > 10)
    {
         Divisor *= 10;
         Auxiliar /= 10;
    }

    for(int i = 0 ; Numero > 10 ; i++)
    {
        V[ i ] = Numero/Divisor;
        Numero %= Divisor;
        Divisor /= 10;
    }
    ImprimirVector(V);
}


void ControlarPar(int V[N])
{
        int AscendenteODescendente;
        AscendenteODescendente=EsAscODesc(V);
        for(int i = 0 ; i < N ; i++)
        {
           if(V[ i ] > 0)
           {
               if(V[ i ]%2 == 0)
               {

                    if(AscendenteODescendente == 1  ||  AscendenteODescendente == 2)
                    {
                        printf("Es escalera\n");
                        break;
                    }
                    else
                        break;
               }
           }
           else
               break;
        }
}


void ControlarImpar(int V[N])
{
        int AscendenteODescendente;
        AscendenteODescendente=EsAscODesc(V);
        for(int i = 0 ; i < N ; i++){
           if(V[ i ] > 0)
           {
                if(V[ i ]%2 != 0)
                {
                     if(AscendenteODescendente == 1  ||  AscendenteODescendente == 2)
                     {
                         printf("Es escalera\n");
                         break;
                     }
                     else
                         break;
                }
           }
           else
               break;
        }
}


int ObtenerSigNumero(int Number)
{
	Number += 2;
	if(Number > 9)
		Number -= 10;

	return Number;
}

int ObtenerAntNumero(int Number)
{
	Number -= 2;
	if(Number < 0)
		Number += 10;

	return Number;
}

int EsAscODesc(int v[N])
{
	int Direccion = NoDireccion;
	for(int i = 0; i < N; i++)
	{
		if(v[ i ] < 0)
			break;

		if(i > 0)
		{
			int AntiguaDireccion = Direccion;
			if(v[ i ] == ObtenerSigNumero(v[i-1]))
				Direccion = ArrDireccion;
			else if(v[ i ] == ObtenerAntNumero(v[i-1]))
				Direccion = AbaDireccion;
			else
			{
				puts("Ni ascendente ni descendente, No es escalera");

				return 3;
			}

			if(AntiguaDireccion != NoDireccion && Direccion != AntiguaDireccion)
			{
				puts("No siempre la misma direccion");

				return 4;
			}
		}
	}

	if(Direccion == ArrDireccion)
    {
		puts("Ascendente");
		return 1;
    }
	else if(Direccion == AbaDireccion)
    {
		puts("Descendente");
		return 2;
    }
}

mierda se me ha desordenado todo

te dao mejor respuesta en una cualquiera , la primera que vi

Divertido
#15

Estás en el nivel 1 ya tienes 900 GMF’s¿?

Aro tio pero porque llevo ya tiempo aqui pero hablo poco no hago noticias ni hago nada entonces cada dia que miro esto y eso voy kojiendo gm’s y entonces los uso para que me ayuden en algo cuando me haga falta

Interesante
#17

quitad las cursivaaaas!!!

Hola,

está todo un poco descolocado, mañana lo miro con calma.

Ah, te devuelvo los gm’s, no me los merezco. Sólo te he echado una mano, el curro lo has hecho tú.
Gracias de todas maneras.

Regards(las plantas)

Divertido
#19

Cada dia estoy mas seguro de que alguno de GM me hara el proyecto de fin de carrera a cambio de GMf’s

argg Weno como tu kieras tio pero si algun dia te asen falta algunos pa algo m los pides

Porcierto 2_Face muy buena idea esa no ombre eso hay que currarselo uno solito, ami me queda un año pa el proyecto…ire pensando xxDD

hmmm, mira que estoy empezando yo con c ahora, y esto me suena a chino todavia

tan diferente son c y c++?

no en realidad no pero usa codigos diferentes , en realidad toda programacion es igual pero con lenguaje distinto , aun asi de c a c++ no cambia mucho

Hola,

jejeje.. si cambia sí. Lo que ocurre es que se puede usar C++ como si fuera C (que es lo que hemos hecho en este ejemplo) ya que C++ es un lenguaje extendido del C.

C++ está enfocado a la programación orientada a objetos ( POO ), un concepto que luego se ha implementado en otros mucho lenguajes de alto nivel.

No es una programación estructurada como el C, se basa en clases y las relaciones entre éstas.
De todas formas, yo no recomiendo el C++ como herramienta de desarrollo. El C suple perfectamente cualquier necesidad de alto rendimiento en sistemas realtime. Para lo demás, los lenguajes enfocados a eventos son mucho más eficaces que los orientados a objeto.

Regards(las plantas)

#Sinsa me sorprendes pareces una wikipedia

Hola,

Comentario #24 por tiko:
#Sinsa me sorprendes pareces una wikipedia

Llevo más de 25 años trabajando en la informática. Si no conozco ésto apaga y vámonos

Regards(las plantas)

Comentario #25 por SinSa:
Hola,

#24 Llevo más de 25 años trabajando en la informática. Si no conozco ésto apaga y vámonos

Regards(las plantas)

y qué, cómo llevais Skynet? Que se hace esperar, hombre.

Hola,

Comentario #26 por ObiJu:
#25 y qué, cómo llevais Skynet? Que se hace esperar, hombre.

Skynet soy yo…

Top sabios
ObiJu 186
Draco351 110
Mave 105
Alim_Jah 97
ReNeGaDo 72
2_Face 60
Casti 60
AlbeR. 57
Anferne 50
Samu. 49
Un punto = una mejor respuesta
Más preguntas de tiko